Home
Welcome to PureDarwin
Darwin is the open source operating system from Apple that forms the base for macOS. PureDarwin is a community project that fills in the gaps to make Darwin usable.
<div class="row">
<div class="col-10 col-lg-8 mx-auto mb-4 text-center">
<p>
The PureDarwin project, which aims to make Apple's open-source Darwin OS more usable, is still actively
maintained as of 2024. While development has been relatively slow, the project continues to progress
through
community contributions. PureDarwin focuses on creating a usable bootable system that is independent of
macOS
components, relying solely on Darwin and other open-source tools.</p>
<p>The project's main focus is providing useful documentation and making it easier for developers and
open-source enthusiasts to engage with Darwin.
</p>
</div>
</div>
</div>
</div>
Test Build
The PD-17.4 Test Build is a minimal system, unlike previous versions like PureDarwin Xmas with a graphical interface. It’s distributed as a virtual machine disk (VMDK) and runs via software like QEMU.
<br><br>Due to the lack of proprietary macOS components, the community must develop alternatives, leaving
elements like
network drivers and hardware support incomplete. This build is intended for developers and open-source
enthusiasts to explore Darwin development outside of macOS.
<br><br><small><i>Based on Darwin 17, which corresponds to macOS High Sierra (10.13.x).</i>
</small>
</p>
<a href="/news/PD17-4-released.html" class="btn btn-primary rounded-pill">PD-17.4 Test Build</a>
<br>
</div>
<div class="col-12 col-lg-7 col-xl-6 pb-4">
<img src="img/homepage/screenshot-hexley.png" class="img-fluid">
</div>
</div>
</div>
</div>
Archive
The PureDarwin Archive contains documentation material and news articles from prior to 2020.
Archive
Code
We have a GitHub org, and encourage visitors to use it for both contribution, and for checking out the latest build sources.
PureDarwin GitHub
News
Jan. 3, 2026
Remembering Cliff Sekel
Nov. 3, 2024
A New Direction
Jul. 1, 2018
Release: PD 17.4
Test Build
Community
Join in on the conversation, talk and watch development, ask questions, chip in, and so much more on our Discord server.
Discord Server <br>
<a href="https://discord.gg/9kz8XXRRcT" target="_blank" class="text-decoration-none">
<img src="img/social-discord.svg" height="26" width="26" alt="Discord" class="mx-1">
</a>
<a href="https://t.me/puredarwin" target="_blank" class="text-decoration-none">
<img src="img/social-telegram.svg" height="24" width="24" alt="Telegram" class="mx-1">
</a>
<a href="https://x.com/puredarwin" target="_blank" class="text-decoration-none">
<img src="img/social-x.svg" height="22" width="22" alt="X (Previously Twitter)" class="mx-1">
</a>
</div>
</div>
<div class="col-12 col-lg-4 pb-4">
<div class="bg-white px-4 py-3 rounded feature-card">
<img src="img/homepage/preferences-desktop-locale.png" height="80px;">
<h3>Status</h3>
<p>PureDarwin is progressing steadily, with ongoing research behind the scenes. There's no GUI yet, and
the system remains minimal, but key foundations are being built for future updates.</p>
</div>
</div>
<div class="col-12 col-lg-4 pb-4">
<div class="bg-white px-4 py-3 rounded feature-card">
<img src="img/homepage/utilities-sdk.png" height="80px;">
<h3>Native SDK</h3>
<p>An SDK that is native of an Apple release modified to target PureDarwin. We are working on a modified
XNU kernel with additional BSD/POSIX features that don’t require us to rely on Apple’s closed sources.
</p>
<button type="button" class="btn btn-outline-secondary rounded-pill btn-sm mb-2" disabled>Coming
Later</button>
</div>
</div>
</div>
</div>
</div>
News
This category contains the latest news and an archive of old news.
Remembering Cliff Sekel
January 3, 2026 — “The PureDarwin project has lost its leader.”
Support Cliff Sekel
February 24, 2025 — “PureDarwin’s Lead Developer; A Passionate Cybersecurity Architect and Open Source Champion”
A New Direction
November 3, 2024 — “Short Term and Long Term Goals”
Release: PD 17.4 Test Build
July 1, 2018 — “This is not a full OS like PureDarwin Xmas was, as Apple have closed down a lot of core components, we the community have to pick up the slack.”
News Archive
Looking for older news? You’ll find it here.
Remembering Cliff Sekel (InsaneDarwin)
January 3, 2026 - PD-Team
The PureDarwin project has lost its leader.
Cliff Sekel, known throughout the community as InsaneDarwin, passed away in November 2025. For many years, and unequivocally in its most recent era, Cliff was the leader of the PureDarwin project and the steward of its community. He was the person who kept the project alive when it would have been easy (and understandable) to let it quietly disappear.
PureDarwin exists today because Cliff refused to let it die.
Leadership Through Action
Cliff did not lead by title alone. He led by doing the hardest work in the project: untangling incomplete source releases, understanding undocumented system behavior, and pushing forward despite the reality that modern Darwin is no longer fully open.
Under Cliff’s leadership, PureDarwin produced its first real, bootable build in many years — PureDarwin 17.4 — marking a turning point from archival effort to living system. That build was not the result of a single patch or workaround, but of sustained, system-level understanding and careful integration across kernel and build tooling. It was by no means ready to use by end-users, but proof to the FOSS community that the last open-source remnants of Darwin could still be turned into a functional operating system.
Direct Engagement with Apple
Cliff was not advocating from the sidelines. For years until his passing he engaged directly with Apple engineers and developers to try and get Apple to open-source important components to make Darwin viable again.
His advocacy around missing components, particularly in networking and system libraries, came from firsthand knowledge, not speculation. While not all of those components were ultimately open-sourced, his efforts helped define the boundaries PureDarwin had to navigate and influenced how the project approached re-implementation and long-term viability.
A Champion of Free and Open Systems
At his core, Cliff was a Free and Open Source Software advocate. He believed deeply that systems should be understandable, inspectable, and buildable by the people who run them. PureDarwin was a challenge to him, although not in the sense of an academic exercise or nostalgia project. It was the belief that Darwin deserved to exist outside of proprietary walls.
He was drawn to hard problems. The harder the system, the more motivated he became to understand it fully. Missing sources, opaque binaries, and shifting interfaces were challenges to be solved, not excuses to stop.
A Community Held Together by One Person
Beyond code, Cliff held the PureDarwin community together. He answered questions, mentored contributors, curated repositories, and kept institutional knowledge alive. For many, he was the first point of contact and the final authority — not because he demanded it, but because he earned trust through competence and consistency.
PureDarwin was not just something he worked on. It was something he carried.
Continuing His Work
Cliff Sekel leaves behind more than repositories and build scripts. He leaves behind a revived project, a working system, and a community that once again believes PureDarwin is possible.
Honoring his legacy means continuing the work with the same care, patience, and insistence on understanding that defined his leadership.
Thank you, Cliff. For the project you rebuilt, for the community you led, and for showing us that even the hardest problems are worth facing.
— The PureDarwin Project
Support Cliff Sekel: PureDarwin’s Lead Developer
February 24, 2025 - PD-Team
Meet Cliff
Meet Cliff Sekel aka InSaneDarwin on most platforms, a Senior Cybersecurity Architect with a deep passion for open-source software, security, and innovation. By day, Cliff works full-time in the cybersecurity industry, ensuring systems remain safe and resilient. By night (and often in the precious moments in between), he dedicates himself to PureDarwin, an open-source OS project that brings the power of Apple’s Darwin to the broader community.
But beyond his professional and open-source contributions, Cliff is also a devoted husband and a loving father of three young children. Every moment outside of work and coding is spent with his beautiful wife Kaitlynn and their little ones (Alex, Nick and Mateo) cherishing the time they have together.
Tragically, Cliff is also facing one of the toughest battles of his life—Stage 4 Colon Cancer. Despite this, he remains committed to his health, his family, his work, and his contributions to the open-source world. However, as treatments become more intensive and time becomes more precious, he needs support.
Why Support Cliff?
Every contribution helps alleviate the burden of medical expenses and gives him more time to focus on what he loves: spending time with his family and advancing the PureDarwin project. His work has already pushed the boundaries of what’s possible in the open-source community, and with your help, he can continue making a lasting impact.
Your donation isn’t just about supporting one person—it’s about helping an entire community thrive. PureDarwin is a labor of love, and every dollar gives Cliff the freedom to continue building, innovating, and leaving behind a legacy that will inspire future generations of developers and open-source enthusiasts.
How You Can Help
If you believe in the power of open-source software, cybersecurity, or just want to support a brilliant mind in his fight, please consider donating through Cliff’s GitHub account. No amount is too small, and every contribution makes a difference.
Donate/Sponsor here: https://github.com/sponsors/csekel
Share this message to spread awareness
Thank You
From the bottom of our hearts, thank you for your support. Let’s help Cliff keep doing what he loves and continue making the open-source world a better place.
A New Direction: Short Term and Long Term Goals
November 3, 2024 - KevDoy and InSaneDarwin (csekel)
The PureDarwin project, originally created to bring Apple’s open-source Darwin OS to more people, is heading in a fresh new direction with some clear short-term and long-term goals. These new plans are all about breathing new life into PureDarwin. In the short term, we’re focused on getting some solid basics in place with graphical interfaces using MATE Desktop and LightDM, so users can get a functional and accessible experience sooner rather than later. Looking further down the line, the long-term goals—shown in some early wireframes—are about creating a fully featured, polished desktop experience that’s easy to use and visually appealing. Plus, a new versioning system will make it clear how PureDarwin is progressing independently from Apple’s Darwin updates, making it easier for everyone to keep track. This refreshed direction sets PureDarwin up to grow from its roots into a user-centered operating system.
Update to Versioning Approach
To distinguish PureDarwin’s progression from Darwin’s, a new versioning system has been proposed:
-
Old Format: PureDarwin Test Build 17.2
- Structure: PureDarwin [Type of Build] [Darwin Version]
-
New Format: PureDarwin 0.3.0 Alpha (Darwin 24)
- Structure: PureDarwin [PureDarwin Version] [State (Alpha, Beta, Stable)] (Darwin [Darwin Version])
This update allows the team to communicate PureDarwin’s independent progress while providing users clarity on release maturity. This approach avoids confusion with outdated versions, like the “Xmas release” (based on Darwin 9 from 2007), which some users still request over more recent builds.
Short-Term Goals (S.T.)
Main Project Organization
- Identify additional community volunteers that would like to focus on a specific area of the project
- Clean and reorganize PureDarwin Repositories where required.
- Update Darwinbuild to work with Github and Meta’s xcbuild that was forked to PureDarwin to update and allow PureDarwin to build on itself.
Core OS - Kexts and Userland
- Build All Core Kexts that are required to allow PureDarwin to boot. (IONVMeFamily, DarwinACPIPlatform, etc)
- Finish updating CoreFoundation from the Swift 5.10 source code (the last true framework for CoreFoundation)
- Add Swift Core/Foundation to PureDarwin’s Base Image.
Design Focus:
- PureDarwin’s current focus is expanding support for graphical user interfaces, aiming for Wayland compatibility.
- The short-term goal concepts (attached below) target a familiar setup with MATE Desktop and LightDM for login management.
- The initial experience will be similar to a vanilla MATE installation, prioritizing usability and functionality to reach as many users as possible. This target allows the team to focus on foundational tasks needed to achieve a functional graphical environment.
Long-Term Goals (L.T.)
Core OS
- Build a proper installer that will integrate with Darwinbuild for continuous CI build and test process.
- Build PureDarwin on BSD/linux.
- More to add from Community!
Design Focus - Our Own Vision for UI Elements
- The long-term wireframes and mockups (attached below) illustrate a “blue sky” vision of a fully realized PureDarwin desktop environment.
- These designs outline the UI elements intended for a cohesive user experience, though specifics are not finalized.
- The wireframes reflect the aspirations for PureDarwin, showcasing what the user interface might eventually look like when developed. However, these are conceptually ambitious, not yet in development.
Note: The current focus remains on short-term objectives. While the wireframes serve as a guide for PureDarwin’s future, queries regarding these long-term goals or their completion timeline are discouraged at this stage.
Additional Goals
These goals may not be something in scope right at this time, but should be kept in mind for the distant future:
- API compatibility with macOS?
- e.g. CoreGraphics, CoreDisplay, reimplementing public APIs and trying to cover for ones we don’t have headers for, so there’s some compatibility with macOS Apps.
Conclusion
With these new targets, the PureDarwin project is heading in an exciting direction, finally giving us the foundation to start building a roadmap for the future. These short-term goals and big-picture aspirations give us something solid to aim for and help shape where we’re going next. While it’s not perfect yet, we’re laying the groundwork and setting a clear direction that’s flexible enough to evolve as we go. The updated versioning system also makes it easier for everyone to follow along with PureDarwin’s progress. Altogether, this new focus brings a sense of purpose to the project and sets us up for a promising future.
Release: PureDarwin 17.4 Test Build for Developers
July 1, 2018 - InSaneDarwin (csekel) Clifford Sekel
Download
- This Test Build can be downloaded from here GitHub (vmdk).
VMDK
-
To run this, first extract the image with
xz(xz -d pd_17_4.vmdk.xz). -
Then, start the VMDK with QEMU:
qemu-system-x86_64 -m 8192 -cpu Penryn -smp 2 -netdev user,id=network0 -device rtl8139,netdev=network0 -serial stdio -drive format=vmdk,file=pd_17_4.vmdk
ISO
-
To run this, first extract the image with
xz(xz -d pd_17_4.vmdk.xz). -
Then convert to VDMK to ISO
qemu-img convert -f vmdk pd_17_4.vmdk -O raw pd_17_4.iso. -
Then, start the ISO with QEMU:
qemu-system-x86_64 -m 8192 -cpu Penryn -smp 2 -netdev user,id=network0 -device rtl8139,netdev=network0 -serial stdio -drive format=raw,file=pd_17_4.iso
Notes
-
This is not a full OS like PureDarwin Xmas was, as Apple have closed down a lot of core components, we the community have to pick up the slack.
-
There is still a lot of work to be done but it can be completed if we band together. If you would like to view what’s on this VM please use Paragon VMDK mounter for macOS users, all other please see what you need to do to mount and read an hfs filesystem on your OS. You may also use this
qemu-img convert -f vmdk pd_17_4.vmdk -O raw pd_17_4.iso -
Please do not ask us questions on how to run macOS applications and non-open source software on PureDarwin. If you want something to hack on, then this is it.
-
We have not finished all the system/network_cmds. We built as much as we could without pulling headers from Apple’s Xcode SDK’s.
Projects
To Do
- Finish out Family Driver Support(USB/SATA/NVME/AHCI/PD-APCIPlatform)
- Finish out System Commands(Reboot/Shutdown)
- Finish out the Networking
- Finish out the Multi-User
Credits
We would like to thank:
- Apple, Inc. for releasing Darwin as Open Source
- David Elliott for his work on boot-132
- The Chameleon team for their work on boot-132
- The xnu-dev team for their work on the XNU kernel
- Stuart Crook for his work on PureFoundation, ddisnoted and libxpc/launchd work
- Ethan Sheriff for his work on the libsystem-plaform and libxpc/launchd work
- William Kent for his work on the DarwinBuild upgrade
- Rafirafi for his work on Generic Platform and PDCrypto kexts
- Mac OS Forge for The DarwinBuild project
Contact Us!
Admins
- Ferdinand Klinzer - bart@pd-devs.org
- Clifford Sekel - insanedarwin@pd-devs.org
Core Dev’s
- Avi Saven - avisaven@pd-devs.org
- Ethan Sherriff - libsystem_ethan@pd-devs.org
- Stuart Cook - sjc@pd-devs.org
- William Kent - wjk@pd-devs.org
Documentation
Darwin is the open source operating system from Apple that forms the base for macOS, iOS, tvOS, etc.
PureDarwin is a community project to make Darwin more usable on its own (some people think of it as the informal successor to OpenDarwin).
One current goal of this project is to provide a useful bootable ISO of Darwin. Another goal of this project is to provide additional documentation. More…
Documentation Categories
Regarding broken, outdated, or incomplete documentation content, we are in the process of fixing this as of October 2024. If you would like to contribute to documentation content please see the Wiki page.
Getting the code
Please visit the GitHub repository.
Credits
There are too many to thank, but here are some highlights:
- Apple, Inc. for releasing Darwin as Open Source
- kvv and _wms for their continuing help
- Adam Baxter for finding a Gold Sponsor to provide a hosted Mac mini from MacStadium
- David Elliott for his work on boot-132
- The Chameleon team for their work on boot-132
- The xnu-dev team for their work on the XNU kernel
- Stuart Crook for his work on PureFoundation
- Guillaume Verdeau for his work on X.Org
- Rafirafi for his work on Generic Platform kexts
- Mac OS Forge
- The DarwinBuild project
- The MacPorts project
- The folks at #macosforge, #macports, #macdev, #opendarwin, #puredarwin,
- Everyone else contributing to Darwin
Notice
PureDarwin and the PureDarwin website are independent resources and are not affiliated with, endorsed by, or sponsored by Apple Inc. Apple, Macintosh, macOS, and related trademarks and logos are the property of Apple Inc., registered in the U.S. and other countries. Darwin (operating system) is licensed under the Apple Public Source License (APSL). All other trademarks are the property of their respective owners.
About
This page describes some part of the PureDarwin project and the motivation behind it, as well as how it relates to other projects.
Goals
The goal of the PureDarwin project is to make Darwin more usable for open source enthusiasts and developers by providing documentation and by enabling them to retrieve, understand, modify, build, and distribute Darwin.
Organization
The PureDarwin project is organized very informally at this stage. There are no official boards and committees. We are not interested in politics and personal agendas, just in smart concepts and quality code. Our team is loosely coupled by a common interest in Darwin and by upholding true Open Source spirit.
Status
As of 2024, PureDarwin remains an active open-source project aimed at making Darwin, the core of macOS, into a standalone operating system. The community is working on PureDarwin PD-17.4, a minimal system distributed primarily as a virtual machine disk (VMDK) that can run in environments like QEMU. This release focuses on providing a development platform independent of macOS components, but it lacks a GUI and has limited hardware and network driver support due to the absence of proprietary macOS parts.
While progress is steady, PureDarwin continues to depend on community contributions to address missing components and improve system usability. Documentation efforts are ongoing, and developers are encouraged to contribute on GitHub. A community discussion space on Discord is also available for support and collaboration.
Contributing
Like other open source projects, PureDarwin is looking for contributors for all aspects of the project.
The PureDarwin project is always looking for talented individuals to contribute to and join the project. To contribute to the PureDarwin project, you should first familiarize yourself with the contents of this wiki. You can also join the IRC discussion on the #puredarwin channel on irc.freenode.net or the Discord server and help each other. Contributions to the project can take various forms, from adding documentation to sending in patches and constructive feedback in the Issues section.
A non-exhaustive list of the fields where investigation has still not been done is available here.
Sponsors
Special thanks to MacStadium for sponsoring a hosted Mac mini. We would also like to thank GitHub for hosting this site and repository and, last but not least, Apple, Inc. for making Darwin available and especially for maintaining the DarwinBuild project.
Frequently asked questions
Why spend time on Darwin?
For learning and 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. Also, it is 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 (collectively called “upstream code”). Specifically, it means that we do not use any components from Mac OS X. It also means that we try to stay as close as possible to the “outside world” as in Mac OS X (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.
Where can I find an ISO image?
A ready-made VMware virtual machine is available from the LegacyDownloads page. This virtual machine contains an ISO that could be used on real hardware as well. It is a proof-of-concept of a minimal Darwin 9 system built from the DarwinBuild project. Please note that you need the latest VMware (Player 2.5, Fusion 2).
When do you plan to release a full ISO image?
Probably when the DarwinBuild project and the MacPorts project will be able to run on a mature PureDarwin release without any “impurities”.
PureDarwin Mascot
Read more: Hexley
APSL
Please obtain, read, and make sure you understand the full text of the APSL. For a quick first glance, here is an excerpt (emphasis added):
2. (...) Apple hereby grants You, (...) a world-wide, royalty-free, non-exclusive license (...) to do the following:
2.1 Unmodified Code.
*You may (...) Externally Deploy verbatim, unmodified copies* of the Original Code, for commercial or non-commercial purposes, provided that in each instance:
(a) You must retain (...) the *copyright and other proprietary notices* (...)
(b) You must *include a copy of this License* (...) and You may not (...) alter or restrict this License (...)
2.2 Modified Code.
*You may modify (...) and Externally Deploy Your Modifications* and Covered Code, for commercial or non-commercial purposes, provided that (...):
(a) You must *satisfy all the conditions of Section 2.1* (...)
(b) You must duplicate (...) the *notice in Exhibit A* in each file of the Source Code of all Your Modifications, and cause the modified files to carry prominent *notices stating that You changed the files and the date of any change*; and
(c) If You Externally Deploy Your Modifications, You must *make Source Code* (...) *available* (...) under the terms set forth in this License, including the license grants set forth in Section 3 below (...).
2.3 Distribution of Executable Versions.
(...) must include a prominent notice, in the code itself as well as in related documentation, stating that Source Code of the Covered Code is available under the terms of this License with *information on how and where to obtain* (...) *Source Code*.
3. Your Grants.
(...) You hereby *grant* (...) a non-exclusive, royalty-free, perpetual, irrevocable *license*, (...) of the same scope and extent as Apple's licenses under Sections 2.1 and 2.2 above.
4. Larger Works.
You *may create a Larger Work* by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. (...)
BinaryDrivers
Apple has been making available certain drivers in binary form under the Apple Binary License. Without these, Darwin as coming from Apple in its current form would not be usable (in fact, not even the XNU kernel could boot). However, third parties have been developing replacements for some of the key binary components, e.g., GenericPlatform-darwin10.zip.
Here is an incomplete list of such drivers. This is for quick reference only, please refer to official Apple documentation for authoritative information.
Darwin 10: MacOSForge
- AppleUSBAudio.root.tar.gz
All found here! http://src.macosforge.org/Roots/10A432/
Darwin 9: MacOSForge
- AppleACPIPlatform.root.tar.gz
- AppleRTC.root.tar.gz
- efiboot.root.tar.gz
- GraphicsDrivers.root.tar.gz
Darwin 8: darwinx86-801.iso
- ACard62xxM-4.tar.bz2
- ACard67162-2.tar.bz2
- ACard671xSCSI-4.tar.bz2
- ACard6885M-2.tar.bz2
- ACard68xxM-4.tar.bz2
- ATTOExpressPCI-204.tar.bz2
- Adaptec78XXSCSI-7.tar.bz2
- AdaptecBuiltDrivers-6.tar.bz2
- AirPortDriver2-350.5.tar.bz2
- AppleACPIPlatform-39.tar.bz2
- AppleBlower-104.0.1.tar.bz2
- AppleBroadcom570X-200.2.11.tar.bz2
- AppleCPUThermo-200.0.0.tar.bz2
- AppleFCU-132.2.0.tar.bz2
- AppleFPButton-105.0.1.tar.bz2
- AppleFWAudio-113.4.2.tar.bz2
- AppleFWOHCI-244.4.0.tar.bz2
- AppleGossamerPE-202.0.1.tar.bz2
- AppleHWClock-142.2.1.tar.bz2
- AppleI2SModemFamily-112.3.2.tar.bz2
- AppleIntel8254XEthernet-4.tar.bz2
- AppleLED-200.0.2.tar.bz2
- AppleLM87-105.0.1.tar.bz2
- AppleLMUController-121.3.2.tar.bz2
- AppleLynx-162.4.0.tar.bz2
- AppleMacRISC2PE-170.2.1.tar.bz2
- AppleMacRISC4PE-160.0.9.tar.bz2
- ApplePMU-220.0.1.tar.bz2
- AppleRTL8169Ethernet-1.tar.bz2
- AppleSEP-101.0.1.tar.bz2
- AppleSMU-106.0.3.tar.bz2
- AppleStorageDrivers-140.1.3.tar.bz2
- Apple_DEC21x4Ethernet-131.4.2.tar.bz2
- GraphicsDrivers-4.0.24.tar.bz2
- IOATABlockStorage-141.0.3.tar.bz2
- IOSCSIArchitectureModelFamily-140.1.7.tar.bz2
Darwin 6: darwinx86-602.iso
ls /Volumes/Darwinx86/System/Installation/apple_binary
- ACard62xxM.kext.tar.gz
- ACard671xSCSI.kext.tar.gz
- ACard68xxM.kext.tar.gz
- ATIRadeon.kext.tar.gz
- ATIRadeon8500.kext.tar.gz
- ATIRadeon8500DVDDriver.bundle.tar.gz
- ATIRadeon8500GA.plugin.tar.gz
- ATIRadeon8500GLDriver.bundle.tar.gz
- ATIRadeonDVDDriver.bundle.tar.gz
- ATIRadeonGA.plugin.tar.gz
- ATIRadeonGLDriver.bundle.tar.gz
- ATIRage128.kext.tar.gz
- ATIRage128DVDDriver.bundle.tar.gz
- ATIRage128GA.plugin.tar.gz
- ATIRage128GLDriver.bundle.tar.gz
- ATIRagePro.kext.tar.gz
- ATIRageProGA.plugin.tar.gz
- ATTOExpressPCI.kext.tar.gz
- Adaptec290X-2930.kext.tar.gz
- Adaptec29160x.kext.tar.gz
- Adaptec39160.kext.tar.gz
- Adaptec78XXSCSI.kext.tar.gz
- AppleAirPort.kext.tar.gz
- AppleAirPortFW.kext.tar.gz
- AppleAltiVecDVDDriver.bundle.tar.gz
- AppleBCM5701Ethernet.kext.tar.gz
- AppleCPUThermo.kext.tar.gz
- AppleCarolina.kext.tar.gz
- AppleCuda.kext.tar.gz
- AppleFPButton.kext.tar.gz
- AppleFWAudio.kext.tar.gz
- AppleFWOHCI.kext.tar.gz
- AppleFan.kext.tar.gz
- AppleGPIO.kext.tar.gz
- AppleGossamerPE.kext.tar.gz
- AppleHWClock.kext.tar.gz
- AppleKauaiATA.kext.tar.gz
- AppleKeyswitch.kext.tar.gz
- AppleKiwiATA.kext.tar.gz
- AppleKiwiRoot.kext.tar.gz
- AppleLED.kext.tar.gz
- AppleLM87.kext.tar.gz
- AppleLynx.kext.tar.gz
- AppleMIDIFWDriver.plugin.tar.gz
- AppleMIDISerialDriver.plugin.tar.gz
- AppleMIDIUSBDriver.plugin.tar.gz
- AppleMLANAudio.kext.tar.gz
- AppleNDRV.tar.gz
- AppleOnboardDisplay.kext.tar.gz
- ApplePCCard16ATA.kext.tar.gz
- ApplePCCardATA.kext.tar.gz
- ApplePMU.kext.tar.gz
- AppleRAID.kext.tar.gz
- AppleRS574Serial.kext.tar.gz
- AppleSCCIrDA.kext.tar.gz
- AppleStorageDrivers.kext.tar.gz
- AppleThermal.kext.tar.gz
- AppleUSBDisplays.kext.tar.gz
- AppleUSBIrDA.kext.tar.gz
- Apple_DEC21x4Ethernet.kext.tar.gz
- DCPModemSupport.kext.tar.gz
- GeForce2MX.kext.tar.gz
- GeForce2MXGA.plugin.tar.gz
- GeForce2MXGLDriver.bundle.tar.gz
- GeForce3.kext.tar.gz
- GeForce3GA.plugin.tar.gz
- GeForce3GLDriver.bundle.tar.gz
- I2CGPIO.kext.tar.gz
- ICAClassicNotSeizeDriver.kext.tar.gz
- ICAFWKodakProDriver.kext.tar.gz
- IOBluetoothFamily.kext.tar.gz
- IOHDIXController.kext.tar.gz
- IOSCSIParallelFamily.kext.tar.gz
- InternalModemSupport.kext.tar.gz
- InternalUSBModem.kext.tar.gz
- MacIOGPIO.kext.tar.gz
- NVDANV10Hal.kext.tar.gz
- NVDANV20Hal.kext.tar.gz
- NVDAResman.kext.tar.gz
- TRANS.TBL
- UltraTek100.kext.tar.gz
- UltraTek133.kext.tar.gz
- UltraTek33.kext.tar.gz
- UltraTek66.kext.tar.gz
- cddafs.kext.tar.gz
- udf.kext.tar.gz
Contact us
This PureDarwin wiki is a community effort. The PureDarwin team can best be reached at
- GitHub issues is the preferred way of communication
- The Discord server has many active members, and 100+ total members
#puredarwinonirc.freenode.net
Downloads
To the best of our knowledge, we followed all licenses that apply. Please contact us if you believe otherwise and we will work immediately to correct the situation.
See the PureDarwin download page on SourceForge for mirrors.
See the GitHub repository for source code, stuff and scripts.
Also see PureDarwin Xmas and PureDarwin Nano.
Hexley
Hexley is not Huxley but the Darwin’s unofficial mascot.
*Hexley DarwinOS Mascot Copyright 2000 by Jon Hooper. * All Rights Reserved.
Visit http://www.hexley.com/ for the full story.
Hexley has also appeared in supertuxkart.
Legal
This part is as complex as the technical one. The PureDarwin project tries and tends to respect as much as possible the legal aspects involved and avoid conflicts, however this process must be at least improved, and at best maintained. Feel free to contact us if you would like to give advice or contribute.
Community project
Please understand that PureDarwin is a community project. It is not affiliated with Apple, Inc.
Licensed material
Substantial parts of this project are bound to the following licenses. Please make sure that you fully understand them and comply with them before you begin to use or contribute to any software or information provided by the PureDarwin project. Please check the documentation that comes with each individual part.
- Apple Public Source License (APSL) (excerpt)
- Apple Binary Driver Software License Agreement
- VMware General Terms
- Other licensed Open Source material, see
/usr/local/OpenSourceLicensesfor license information
Original material
Material originally engineered within the PureDarwin project is licensed under the BSD license as follows, unless specifically stated otherwise in the respective files or directories:
/*-
* Copyright (c) 2007-2009 The PureDarwin Project.
* All rights reserved.
*
* @LICENSE_HEADER_START@
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @LICENSE_HEADER_END@
*/
We kindly suggest (but do not require) that you contribute any modifications back to the project.
Hexley
The Hexley mascot for Darwin is Jon Hooper’s copyright since 2000. It is used with permission from Jon Hooper.
Being “open”
Please feel free to contribute and discuss.
What openness means to us…
- We follow any licenses imposed on the upstream software we use
- The code and patches we produce (our “original contributions”) are Open Source, using the BSD license wherever possible
- We do not accept any patches or contributions that do not meet the above criteria
- From Wiktionary
- (computing, education) degree of accessibility to view, use, and modify in a shared environment with legal rights generally held in common and preventing proprietary restrictions on the right of others to continue viewing, using, modifying and sharing.
- (systems theory) The degree to which a system operates with distinct boundaries across which exchange occurs capable of inducing change in the system while maintaining the boundaries themselves.
And what it doesn’t mean to us…
- We don’t think that every piece of closed-source software is evil in all cases (read: as long as it works, we are fine with using small portions of licensed Apple closed-source software if no alternative exists)
- Open Source is not “the” solution, but “a” solution or at least “a part of the” solution.
Screenshots
PureDarwin 9 running XFCE from MacPorts
PureDarwin Nano running on a MacBook Pro
PureDarwin Nano running on a PC
PureDarwin Nano running on a MacBook
Enlightenment 17 (0.16.999.037) on PureDarwin on VMware Fusion 2.0b
Fluxbox 1.1.0.1 on PureDarwin running on VMware Fusion 2.02b
Window Maker 0.92.0 on PureDarwin running on VMware Fusion 2.02b
wmii 3.1 on PureDarwin running on VMware Fusion 2.02b
PureDarwin Nano running on VMware Player 2.5 on Ubuntu
PureDarwin Nano running on VMware Player 2.5.1 on Windows
PureDarwin Nano running on VMware Fusion 2.02b on Leopard 10.5.5
PureDarwin Nano running on VMware Player 2.5 on Fedora 8
PureDarwin 9F_20081219 on VMware Fusion 2
PureDarwin 9 running gtk-demo via TightVNC
Status
See the changelog for the history of commits made on Github.
PureDarwin is currently working on AHCI/NVMe 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 Progress and Research
We’ve just moved to Apple’s latest code of 10.12.4
This is a living Document that is always being updated!
Currently the project is still moving forward
Current Projects being actively worked on
Working on ACHI Family and Kext work for Darwin use only it will have private headers that will be built into the Kext. Working on CoreFoundation code pulled from latest https://github.com/apple/swift-corelibs-foundation/tree/master/CoreFoundation
Completed Lib’s
Thanks to Ethan we have dyld, libdispatch and libsystem patches along with libplatform project code and built Roots.
Projects Still to be worked on
Port/Upgrade Mac OSX 10.8.4 UsbFamily to macOS 10.12.4 as UsbFamily no longer open sourced (Unless we know some apple people to talk too)
Example of command to compile libfirehose_kernel.a needed for XNU building on OSX
Using Darwinbuild
sudo darwinbuild -nochroot -target=libfirehose_kernel libdispatch
** INSTALL SUCCEEDED **
BUILD TIME: 0h 0m 1s
EXIT STATUS: 0
libdispatch - 4 files registered.
40755 0 0 0 ./usr
40755 0 0 0 ./usr/local
40755 0 0 0 ./usr/local/include
40755 0 0 0 ./usr/local/include/kernel
40755 0 0 0 ./usr/local/include/kernel/os
ee27353e97833d9a61d67724b5330e74634f7fce 100644 0 0 3273 ./usr/local/include/kernel/os/firehose_buffer_private.h
40755 0 0 0 ./usr/local/lib
40755 0 0 0 ./usr/local/lib/kernel
a99bc86fe2a3a0b967c9da72102ea6dc2ad7b2a1 100644 0 0 36184 ./usr/local/lib/kernel/libfirehose_kernel.a
5829603c6ba1eecb57e05272440364ab63712aad 100644 0 0 37464 ./usr/local/lib/kernel/libfirehose_kernel_debug.a
a99bc86fe2a3a0b967c9da72102ea6dc2ad7b2a1 100644 0 0 36184 ./usr/local/lib/kernel/libfirehose_kernel_profile.a
Using Xcodebuild
xcodebuild -sdk macosx10.12 install -target=libfirehose_kernel -project=libdispatch.xcodeproj
The following build commands
build/Release/libfirehose_server.a
build/Release/libfirehose_server_profile.a
build/Release/libfirehose_server_debug.a
Built Roots with OpenSource Headers added into the macosx10.12.sdk under Xcode This plist https://github.com/PureDarwin/PureDarwin-System-Plist/blob/master/16D32pd1.plist This Modified Darwinbuild for macOS(Database code sqlite changes) https://github.com/PureDarwin/darwinbuild
libplatform has been built Ethan rocks!
** INSTALL SUCCEEDED **
BUILD TIME: 0h 0m 2s
EXIT STATUS: 0
libplatform - 27 files registered.
40755 0 0 0 ./usr
40755 0 0 0 ./usr/include
3de726adedb1c184243d04eee2528368742fb51f 100644 0 0 5682 ./usr/include/_simple.h
40755 0 0 0 ./usr/include/libkern
d699b626d16c8271fdef328f1da84f95946bb2f2 100644 0 0 1651 ./usr/include/libkern/OSAtomic.h
58481d3f98392795650329fc456e51f087edfb91 100644 0 0 43094 ./usr/include/libkern/OSAtomicDeprecated.h
c260f5ba655dc7c1b6ee5e11f7bf7a9cc29923ed 100644 0 0 6662 ./usr/include/libkern/OSAtomicQueue.h
cfe2e5f61f05eced206eaab55aa1e6dcd8b9a4f0 100644 0 0 2344 ./usr/include/libkern/OSCacheControl.h
3a1e10e4fcb8781e68dc30001a1ed51017c37437 100644 0 0 6632 ./usr/include/libkern/OSSpinLockDeprecated.h
40755 0 0 0 ./usr/include/os
29ae8f4a130f58f1eba6ab291c738fcb6133d67e 100644 0 0 2614 ./usr/include/os/alloc_once_impl.h
8d0493ad759089903983797cd90b2b41172491be 100644 0 0 7167 ./usr/include/os/base.h
254ca8737698de8ffcb9b64a9497d9eee2b41d07 100644 0 0 1138 ./usr/include/os/base_private.h
40755 0 0 0 ./usr/include/os/internal
da4bc957cdea68419e06953574bc25d65641d4b7 100644 0 0 9987 ./usr/include/os/internal/atomic.h
6f069e852ff3d00bfaf31628e2bc2d5e89303096 100644 0 0 1678 ./usr/include/os/internal/crashlog.h
3cc65922de5049d8345bb504553bf3661f0db1fb 100644 0 0 1785 ./usr/include/os/internal/internal_shared.h
17e697b9c6e75dd650cdaa2965e82939ad0b94e1 100644 0 0 4382 ./usr/include/os/lock.h
6dd615291abe72e916ff06bce4de199a9b52f100 100644 0 0 20651 ./usr/include/os/lock_private.h
77b1c40e6004be6fdef3bd29eae6e0e4af888944 100644 0 0 1851 ./usr/include/os/once_private.h
3dde0d4b8cef814c45bcdf34bd1a6ff548abb679 100644 0 0 2401 ./usr/include/os/semaphore_private.h
40755 0 0 0 ./usr/include/platform
5e3181377f01dc0b30b366d4ba3019703e1e2566 100644 0 0 2368 ./usr/include/platform/compat.h
69e27b55c2d1de6aeb5a852cddb230f849701b3a 100644 0 0 12484 ./usr/include/platform/introspection_private.h
b108c703fa83cf3145743844646ea977dd2dd732 100644 0 0 3127 ./usr/include/platform/string.h
79d7c60b7fe04d405d6b053e357dad4e8915e59d 100644 0 0 3139 ./usr/include/setjmp.h
2b808d6255928e200b4e7a15a105ee63b09bf658 100644 0 0 2054 ./usr/include/ucontext.h
40755 0 0 0 ./usr/lib
40755 0 0 0 ./usr/lib/system
da39a3ee5e6b4b0d3255bfef95601890afd80709 100755 0 0 38548 ./usr/lib/system/libsystem_platform.dylib
40755 0 0 0 ./usr/local
40755 0 0 0 ./usr/local/include
40755 0 0 0 ./usr/local/include/libkern
d00e308ffee156e164dd5c76f63f2f8fa77647a3 100644 0 0 1410 ./usr/local/include/libkern/OSAtomic.h
e7ad001908cbd437e48a9fd347a4399bd12e1f84 100644 0 0 123 ./usr/local/include/libkern/module.modulemap
40755 0 0 0 ./usr/local/include/os
cec7efca5a198fc2f1cb06ca7201c678be33d1e5 100644 0 0 3892 ./usr/local/include/os/internal.h
fdb5862c640f6d779e8bb91c2546378714bebbdf 100644 0 0 2712 ./usr/local/include/os/internal_asm.h
f86466e8cb0ee71de4173b8ef15b3786024d9eb9 100644 0 0 2486 ./usr/local/include/os/yield.h
#Roots built so far being updated daily*
InSanes-iMac:InSaneDarwin insane$ ls -alh Packages/ | grep .root.tar.gz
-rw-r--r-- 1 root admin 9.2K Apr 18 11:46 AppleAPIC.root.tar.gz
-rw-r--r-- 1 root admin 8.4K Apr 11 16:38 AppleFileSystemDriver.root.tar.gz
-rw-r--r-- 1 root admin 27K Apr 18 11:46 AppleIntelPIIXATA.root.tar.gz
-rw-r--r-- 1 root admin 814B Apr 11 16:38 AvailabilityVersions.root.tar.gz
-rw-r--r-- 1 root admin 24M Apr 11 16:38 BerkeleyDB.root.tar.gz
-rw-r--r-- 1 root admin 605K Apr 11 16:38 CrackLib.root.tar.gz
-rw-r--r-- 1 root admin 3.9K Apr 11 16:38 Csu.root.tar.gz
-rw-r--r-- 1 root admin 12M Apr 11 16:38 ICU.root.tar.gz
-rw-r--r-- 1 root admin 17K Apr 18 11:46 IOACPIFamily.root.tar.gz
-rw-r--r-- 1 root admin 58K Apr 11 16:38 IOATAFamily.root.tar.gz
-rw-r--r-- 1 root admin 141K Apr 11 16:38 IOAudioFamily.root.tar.gz
-rw-r--r-- 1 root admin 26K Apr 11 16:38 IOBDStorageFamily.root.tar.gz
-rw-r--r-- 1 root admin 38K Apr 11 16:38 IOCDStorageFamily.root.tar.gz
-rw-r--r-- 1 root admin 28K Apr 11 16:38 IODVDStorageFamily.root.tar.gz
-rw-r--r-- 1 root admin 74K Apr 11 16:38 IOFireWireAVC.root.tar.gz
-rw-r--r-- 1 root admin 324K Apr 11 16:38 IOFireWireFamily.root.tar.gz
-rw-r--r-- 1 root admin 58K Apr 11 16:38 IOFireWireIP.root.tar.gz
-rw-r--r-- 1 root admin 87K Apr 11 16:38 IOFireWireSBP2.root.tar.gz
-rw-r--r-- 1 root admin 163K Apr 11 16:38 IONetworkingFamily.root.tar.gz
-rw-r--r-- 1 root admin 122K Apr 11 16:38 IOPCIFamily.root.tar.gz
-rw-r--r-- 1 root admin 33K Apr 11 16:38 IOSerialFamily.root.tar.gz
-rw-r--r-- 1 root admin 109K Apr 11 16:38 IOStorageFamily.root.tar.gz
-rw-r--r-- 1 root admin 61K Apr 20 01:31 Libc.root.tar.gz
-rw-r--r-- 1 root admin 378K Apr 21 13:03 Libinfo.root.tar.gz
-rw-r--r-- 1 root admin 34K Apr 11 16:38 Librpcsvc.root.tar.gz
-rw-r--r-- 1 root admin 1.4K Apr 11 16:38 Liby.root.tar.gz
-rw-r--r-- 1 root admin 40K Apr 11 16:38 OpenPAM.root.tar.gz
-rw-r--r-- 1 root admin 91K Apr 11 16:38 SmartcardCCID.root.tar.gz
-rw-r--r-- 1 root admin 1.2M Apr 11 16:38 TimeZoneData.root.tar.gz
-rw-r--r-- 1 root admin 2.0K Apr 11 16:38 UserNotification.root.tar.gz
-rw-r--r-- 1 root admin 905K Apr 11 16:38 WebInspectorUI.root.tar.gz
-rw-r--r-- 1 root admin 160K Apr 11 16:38 adv_cmds.root.tar.gz
-rw-r--r-- 1 root admin 389K Apr 11 16:38 apr.root.tar.gz
-rw-r--r-- 1 root admin 18K Apr 11 16:38 architecture.root.tar.gz
-rw-r--r-- 1 root admin 51K Apr 11 16:38 awk.root.tar.gz
-rw-r--r-- 1 root admin 2.2M Apr 19 22:27 bash.root.tar.gz
-rw-r--r-- 1 root admin 17K Apr 11 16:38 basic_cmds.root.tar.gz
-rw-r--r-- 1 root admin 5.7M Apr 11 16:39 bind9.root.tar.gz
-rw-r--r-- 1 root admin 271K Apr 11 16:39 bmalloc.root.tar.gz
-rw-r--r-- 1 root admin 74K Apr 11 16:39 bootstrap_cmds.root.tar.gz
-rw-r--r-- 1 root admin 60K Apr 11 16:39 bzip2.root.tar.gz
-rw-r--r-- 1 root admin 53K Apr 11 16:39 copyfile.root.tar.gz
-rw-r--r-- 1 root admin 4.6K Apr 11 16:39 coreTLS.root.tar.gz
-rw-r--r-- 1 root admin 6.8M Apr 11 16:39 cups.root.tar.gz
-rw-r--r-- 1 root admin 568K Apr 11 16:39 curl.root.tar.gz
-rw-r--r-- 1 root admin 213K Apr 11 16:39 cxxfilt.root.tar.gz
-rw-r--r-- 1 root admin 84K Apr 11 16:39 diskdev_cmds.root.tar.gz
-rw-r--r-- 1 root admin 11K Apr 11 16:39 disklabel.root.tar.gz
-rw-r--r-- 1 root admin 23K Apr 11 16:39 doc_cmds.root.tar.gz
-rw-r--r-- 1 root admin 193K Apr 19 22:27 dyld.root.tar.gz
-rw-r--r-- 1 root admin 32M Apr 11 16:39 emacs.root.tar.gz
-rw-r--r-- 1 root admin 66K Apr 11 16:39 expat.root.tar.gz
-rw-r--r-- 1 root admin 606K Apr 11 16:39 file.root.tar.gz
-rw-r--r-- 1 root admin 254K Apr 11 16:39 file_cmds.root.tar.gz
-rw-r--r-- 1 root admin 1.4M Apr 11 16:39 files.root.tar.gz
-rw-r--r-- 1 root admin 148K Apr 11 16:39 gnudiff.root.tar.gz
-rw-r--r-- 1 root admin 49K Apr 11 16:39 gnuserv.root.tar.gz
-rw-r--r-- 1 root admin 155K Apr 11 16:39 gnutar.root.tar.gz
-rw-r--r-- 1 root admin 60K Apr 11 16:39 gpatch.root.tar.gz
-rw-r--r-- 1 root admin 18K Apr 11 16:39 gpt.root.tar.gz
-rw-r--r-- 1 root admin 2.5M Apr 11 16:39 groff.root.tar.gz
-rw-r--r-- 1 root admin 544K Apr 11 16:39 hfs.root.tar.gz
-rw-r--r-- 1 root admin 148K Apr 11 16:39 hunspell.root.tar.gz
-rw-r--r-- 1 root admin 2.8K Apr 11 16:39 keymgr.root.tar.gz
-rw-r--r-- 1 root admin 696K Apr 11 16:39 ksh.root.tar.gz
-rw-r--r-- 1 root admin 85K Apr 11 16:39 less.root.tar.gz
-rw-r--r-- 1 root admin 7.2K Apr 11 16:39 libauto.root.tar.gz
-rw-r--r-- 1 root admin 5.7K Apr 20 20:25 libcoreservices.root.tar.gz
-rw-r--r-- 1 root admin 1.3M Apr 21 13:03 libdispatch.root.tar.gz
-rw-r--r-- 1 root admin 92K Apr 11 16:39 libedit.root.tar.gz
-rw-r--r-- 1 root admin 369K Apr 11 16:39 libevent.root.tar.gz
-rw-r--r-- 1 root admin 15K Apr 11 16:39 libffi.root.tar.gz
-rw-r--r-- 1 root admin 40K Apr 12 06:17 libfirehose_kernel.root.tar.gz
-rw-r--r-- 1 root admin 147K Apr 12 06:17 libfirehose_server.root.tar.gz
-rw-r--r-- 1 root admin 4.4K Apr 11 16:39 libgcc.root.tar.gz
-rw-r--r-- 1 root admin 747K Apr 11 16:39 libiconv.root.tar.gz
-rw-r--r-- 1 root admin 33K Apr 19 22:27 libkxld.root.tar.gz
-rw-r--r-- 1 root admin 405K Apr 21 00:58 libmalloc.root.tar.gz
-rw-r--r-- 1 root admin 44K Apr 18 13:11 libplatform.root.tar.gz
-rw-r--r-- 1 root admin 104K Apr 12 01:49 libplatform_dyld.root.tar.gz
-rw-r--r-- 1 root admin 104K Apr 12 01:49 libplatform_static.root.tar.gz
-rw-r--r-- 1 root admin 27K Apr 12 08:35 libpthread.root.tar.gz
-rw-r--r-- 1 root admin 33K Apr 12 08:45 libpthread_dyld_static.root.tar.gz
-rw-r--r-- 1 root admin 83K Apr 12 08:45 libpthread_eOS_static.root.tar.gz
-rw-r--r-- 1 root admin 83K Apr 12 08:45 libpthread_generic_static.root.tar.gz
-rw-r--r-- 1 root admin 98K Apr 11 16:39 libresolv.root.tar.gz
-rw-r--r-- 1 root admin 871K Apr 11 16:39 libstdcxx.root.tar.gz
-rw-r--r-- 1 root admin 20K Apr 11 16:39 libtelnet.root.tar.gz
-rw-r--r-- 1 root admin 31K Apr 11 16:39 libutil.root.tar.gz
-rw-r--r-- 1 root admin 648K Apr 11 16:39 libxml2.root.tar.gz
-rw-r--r-- 1 root admin 165K Apr 11 16:39 libxslt.root.tar.gz
-rw-r--r-- 1 root admin 89K Apr 11 16:39 lukemftp.root.tar.gz
-rw-r--r-- 1 root admin 83K Apr 11 16:39 lukemftpd.root.tar.gz
-rw-r--r-- 1 root admin 69K Apr 11 16:39 mail_cmds.root.tar.gz
-rw-r--r-- 1 root admin 122K Apr 11 16:39 misc_cmds.root.tar.gz
-rw-r--r-- 1 root admin 30K Apr 11 16:39 modemccl.root.tar.gz
-rw-r--r-- 1 root admin 78K Apr 11 16:39 msdosfs.root.tar.gz
-rw-r--r-- 1 root admin 82K Apr 11 16:39 nano.root.tar.gz
-rw-r--r-- 1 root admin 822K Apr 11 16:39 ncurses.root.tar.gz
-rw-r--r-- 1 root admin 237K Apr 11 16:39 ntfs.root.tar.gz
-rw-r--r-- 1 root admin 20K Apr 11 16:39 patch_cmds.root.tar.gz
-rw-r--r-- 1 root admin 507K Apr 11 16:39 pcre.root.tar.gz
-rw-r--r-- 1 root admin 27K Apr 11 16:39 pdisk.root.tar.gz
-rw-r--r-- 1 root admin 27K Apr 12 08:35 pthread_kext.root.tar.gz
-rw-r--r-- 1 root admin 16K Apr 11 16:39 removefile.root.tar.gz
-rw-r--r-- 1 root admin 208K Apr 11 16:39 rsync.root.tar.gz
-rw-r--r-- 1 root admin 307K Apr 11 16:39 sudo.root.tar.gz
-rw-r--r-- 1 root admin 899K Apr 11 16:39 swig.root.tar.gz
-rw-r--r-- 1 root admin 135K Apr 19 22:27 syslog.root.tar.gz
-rw-r--r-- 1 root admin 2.8K Apr 11 16:39 system_config.root.tar.gz
-rw-r--r-- 1 root admin 245K Apr 11 16:39 tcsh.root.tar.gz
-rw-r--r-- 1 root admin 912K Apr 11 16:39 texinfo.root.tar.gz
-rw-r--r-- 1 root admin 251K Apr 11 16:39 text_cmds.root.tar.gz
-rw-r--r-- 1 root admin 56K Apr 11 16:39 top.root.tar.gz
-rw-r--r-- 1 root admin 7.1K Apr 11 16:39 usertemplate.root.tar.gz
-rw-r--r-- 1 root admin 581K Apr 11 16:39 uucp.root.tar.gz
-rw-r--r-- 1 root admin 7.3M Apr 11 16:39 vim.root.tar.gz
-rw-r--r-- 1 root admin 115K Apr 18 11:46 xar.root.tar.gz
-rw-r--r-- 1 root admin 8.1M Apr 19 22:27 xnu.root.tar.gz
-rw-r--r-- 1 root admin 75K Apr 12 06:28 zlib.root.tar.gz
-rw-r--r-- 1 root admin 2.1M Apr 11 16:39 zsh.root.tar.gz
Todos:
port libktrace and few others to Darwin.
Projects to look forward to on PureDarwin:
SwiftFoundation for Darwin
Darwin’s Own AHCI Family OpenSource
Darwin’s eMMC Family for both arm and x86_64 (great for those smaller embedded internal SSD’s)
Darwin’s XNU Arm port
Team
We are a welcoming community of open source enthusiasts and developers. Everyone is invited to join the PureDarwin project, as long as you agree to promote true open source spirit and abide by any licenses that apply. Unix knowledge is a must at this point.
If you would like to get a puredarwin.org account, please visit #puredarwin on irc.freenode.net. Also, send an e-mail, including your full name, contact information and your desired PureDarwin username (ideally the same as your IRC nickname) to admin@puredarwin.org.
If you like, you can also include information about your hardware so that we can coordinate testing better.
TODO
Would you like to help out with PureDarwin? Don’t know where to start?
This page lists (from higher to lower layers, but non exhaustively) some of the areas where work is needed to make Darwin the truly world-class OS it should be.
Feedback
Feedback is crucial, in whatever form it takes; from the container to the content including the way of sending it.
Catalogue compatible hardware
If you’ve got PureDarwin to run somewhere - either in a VM we don’t know about, or on a real piece of hardware - then please let us know so that we can add it to our compatible hardware page.
Test other applications
With the X window system up and running, PureDarwin becomes a very compatible BSD clone, meaning that it should run any of the wide range of software available for that platform. As an example, most of the pure binaries compiled through the MacPorts project can easily be copied into and used in a PureDarwin release. Let us know what you got running.
Complaints
It would be much appreciated if criticism is constructive.
Legal aspects
Help us to improve several legal aspects, including, non-exhaustively, how to handle intellectual property, trademarks, patents, copyright and licenses. What to provide? Where? How?
Packages and binary roots
Test available packages
The basic Darwin system as provided by Apple is made up of over 400 different packages. Many of these have been included in releases of PureDarwin (Xmas and Nano). Many more are available from http://src.macosforge.org. And they all need testing. We know this method is empiric but we simply need to know what works, and (more importantly) what doesn’t, so that we can focus our efforts there.
A particular interest at the moment is per example the high level web application stack: Apache, MySQL, and PHP (or lighttpd, rrdtool and postgresql, etc..). That also could be the other scripting languages as Python, Perl, Ruby… or also some more low level behavior via the use of DTrace per example. We haven’t had a chance to put them through their paces yet, so maybe you could try them and let us know.
Build missing packages
Not every Darwin project is available as a pre-built binary root. There’s a list of these ‘missing’ packages (about 80 in all) in the git repository (under projects/PureDarwinPackageDatabase/PackageLists in the file missing.txt). Some of these are known not to build.
Others are untested. If you succeed in building them, let us know so we can host a copy of the binary root for others and make them available for testing.
Device drivers
Locate and list available device drivers
Like all operating systems, Darwin will live or die by its hardware support.
There are a great many IOKit device drivers created by Apple and 3rd parties available. We first need to collect a list together, so that they can be tested and then bundled with future versions of PureDarwin.
Notes: See the Network page, the KEXTs page, the Graphics page, the Binary drivers page, the ZFS page, etc…
Write device drivers
This is a crucial mission. Even pulling together all of the 3rd party drivers available, there will still be plenty of unsupported hardware. And we also have the problem of device drivers which are available in OS X but which haven’t been made available for free redistribution in any form by Apple (e.g., the e1000 support via AppleIntel82454XEthernet driver springs instantly to mind).
So if you have the skills in this area, why not roll up your sleeves and get stuck in?
Wiki
State
This wiki originated as a Google Site, then was migrated to a GitHub Wiki, and then ported to this website.
In the migration to GitHub, and therefore conversion to Markdown from HTML, a lot of formatting and many images were lost. The efforts of nekename have restored almost all of the images, fixed grammatical and formatting issues in the About and News categories, and removed most of the junk HTML tags lying around in pages. Additionally, many pages are more than a decade old, so many links are broken - please try to relocate them instead before removing them!
Style guide
This is the style guide you should follow when editing or creating wiki pages, or cleaning up broken ones.
Headers
Headers should only be created using proper # syntax. No ====== or —— should be used at all, and any existing occurences should be removed. All headers should be both preceded and followed by a newline.
H1s (single #) should be used only at the very start of a page. These should not be preceded by a newline.
Links to other pages
Always include the .md suffix. For pages in the same category, provide only the page name in the link. For pages in other categories, provide the full path from the root (e.g. /developers/Bochs.md).
Lists
For lists with no particular order, use - as the item prefix. Otherwise, use an ordered list, with 123. as the item prefix.
HTML
HTML should be avoided at all costs. Any Google Sites HTML remnants should be replaced with proper Markdown syntax.
Trailing newline
All files should end with a single trailing newline.
For developers
Prerequisites
In order to do any serious PureDarwin development, please familiarize yourself with the DarwinBuild project and the MacPorts project, as these are the key components of building software for Darwin.
PureDarwin releases
See PureDarwin Xmas. If you want to have a look at a minimalistic bootable Darwin 9 system, check out PureDarwin nano.
Testers wanted
To qualify as a tester for the current PureDarwin installer, you’ll need
- An Intel Mac with Leopard (to run the installer and to test whether the PureDarwin USB drive can be booted)
- A USB drive, 1GB or larger (will be completely erased)
- Latest VMware or VirtualBox release
- Fast Internet connection (to download Darwin 9 packages)
- A good backup since there are absolutely no guarantees
Please contact us in irc #puredarwin if you want to be a tester.
Useful tools
A utility for browsing through the contents of binary roots is available. It currently covers Darwin build 9F33, and provides links to relevant source code, and binaries.
Darwin mailing lists
Have a look at the Darwin mailing lists.
Documentation
This wiki is a place for users and developers alike to document and discuss Darwin. See below for some pages we have already started.
Audio
This page is about a future audio support in PureDarwin. draft. Status.
IOAudioFamily.kext (patched) and VoodooHDA.kext can be loaded. We heard great progress from Cooper previously, also extending our knowledge to the fact that “audio support” does not only rely on the kext side but also in the user-land. IOAudioFamily and VoodooHDA
High Definition Audio (HDA) driver for Mac OS X
VoodooHDA is an open source audio driver for devices compliant with the Intel High Definition Audio (HDA) specification, based primarily on code from the FreeBSD hdac driver. It is intended as an Intel-only replacement for AppleHDA on Mac OS X with support for a wide range of audio controllers and codecs.
VoodooHDA cannot be loaded, because one of its dependencies (IOAudioFamily.kext) is not satisifed. http://code.google.com/p/voodoohda/issues/detail?id=38
Since IOAudioFamily has been patched for purity purpose, IOAudioFamily.kext can now be loaded without OSvKernDSPLib.kext. See http://darwinbuild.macosforge.org/trac/ticket/89. Consequently, VoodooHDA can also be loaded, its Info.plist has been modified in order to match the virtual devices of VMware but the “start” method doesn’t seem to succeed.
No sound nor good symptoms.
Blockers:
- OSvKernDSPLib.kext
- AppleAC97Audio.kext Please let us know if you have more information and/or solutions.
Cooper sent us the following information in March 2010: OSvKernDSPLib.kext: We don’t have the source but the functions that we need are all well documented in the ADC and simple (each perform a single mathematical operation). It would be easy for someone to implement these and patch them directly into whatever needs them or, better still, create a kext which exports them called OSvKernDSPLib.kext.
Usermode access: If you use shark to do a trace (on OSX) of a program recording audio you’ll find LOTS of references to HP_ funcs, in particular HP_IOThread. Now if you search over a full XCode install you’ll find you actually have that code. Turns out that a huge amount of the usermode Coreaudio code is shipped with XCode to allow the development/testing of CoreAudioPlugins; go look in the folders called HPBase, PublicUtility etc. These classes etc call down to the lower level audio interface functions, header files: AudioHardware.h etc (we don’t have the source) and these then communicate with the audio drivers IOUserClient in the kernel. So, where does that leave us. Thankfully by trawling over the HP_ code you can find out whats important for the user code (the key thing it realtime priority), and by trawling through the kernel source (IOKit) you can find out what interface the code in AudioHardware.h uses (http://lists.apple.com/archives/Darwin-dev/2009/Aug/msg00000.html). What I posted back in August on the Darwin-dev list is basically correct and the answers to my questions are:
Q. Is there a mechanism to tell me when its safe to use this data, or is it, as I suspect, volatile and you use it “as it”. A. Sort of. You basically need a realtime usermode thread which polls the kernel for the correct data. The generic, kernel, audio stuff then gives you a copy of the samples your expecting.
Q. My key question is how do I get intelligible audio from the driver? I’ve tried putting a sleep in, but to no avail. A. IIRC, I did do this over 6 months ago; it all starts working once you get your io thread working correctly. To help illustrate all this I thought I’d attach my test program. I know its a mess, but it does (or did last time I used it) read audio directly from the kernel on OSX and save it into a file. What I did was pull out all the key things from the HP_IOThread func, combine that which what I’d learnt about the raw IOKIt interface and put it all together. You should be able to load the output audio into something like Audacity and then play it. Simples, see :)
Credits
- Cooper
Bochs, the Open Source IA-32 emulation project
Boot sequence
The Plex86/Bochs VGABios
DFE bootloader
Decompressing extensions
CPU:FSB multiplier detection fails
Please, let us know if you have a solution.
Chameleon bootloader
Kernel Panic
far..
Then it stalls.
Resources
- http://bochs.sourceforge.net/
- http://code.google.com/p/xnu-dev (Voodoo, A fork of the XNU kernel)
Build server
Special thanks to MacStadium for sponsoring a hosted Mac mini, and for voltagex for organizing and setting it up.
Usage
The machine is intended as a build server, possibly with continuous build and integration hooks to GitHub. Ideally, developers can see the impact of every change they make in near-real time. We are still working on setting this up.
Also, we would like to build and host binary packages of and for PureDarwin.
Machine specs
system_profiler SPHardwareDataType
Hardware:
Hardware Overview:
Model Name: Mac mini
Model Identifier: Macmini7,1
Processor Name: Intel Core i5
Processor Speed: 2.8 GHz
Number of Processors: 1
Total Number of Cores: 2
L2 Cache (per Core): 256 KB
L3 Cache: 3 MB
Memory: 16 GB
Access
Access to this machine can be granted to longstanding contributors of the PureDarwin project who have a proven track record of useful contributions to the project on GitHub. Do not apply for access before having contributed to the project in a meaningful way on GitHub. Contact voltagex in #puredarwin on irc.freenode.net if you think you qualify.
CFLite
This page covers the differences between CoreFoundation as found on Mac OS X (“CF”) and CoreFoundation as found on Darwin (“CFLite”).
Versions discussed
At the time of this writing, the latest CF on Mac OS X is version 6.5.4 (CFBundleVersion 476.15, CFBundleShortVersionString 6.5.4, SourceVersion 4761500).
The latest published CFLite source is CF-476.15.tar.gz (CFBundleVersion 476, CFBundleShortVersionString 6.5). A binary root compiled through DarwinBuild is available from http://src.macosforge.org/Roots/9C31/CF.root.tar.gz.
An experimental binary root of CFLite also compiled through DarwinBuild (but includes patches from 9F33pd1.plist) can be found here.
The PureFoundation project also provides patched binaries of CFLite. These combine patches necessary to fix some short-comings with CFLite with those needed by the cloned Foundation.framework, and as a result require the presence of that framework.
Notes: Please, read Apple CFLite page for more information.
There is also OpenCFLite, a version of CFLite maintained by an couple of independent developers (blog) which aims to port it to Windows and Linux. As well as the platform-specific changes, this also includes a number of bug-fixes and feature enhancements. There is a good chance that in the near future the version of CFLite bundled for use with PureFoundation will be based on OpenCFLite rather than directly on Apple’s CFLite.
Exported symbols
Let’s compare the number of symbols exported by CF and CF-Lite with nm.
Number of exported symbols
nm -g CoreFoundation | grep -v "U " | cut -d " " -f 3 > CF.symbols
nm -g CoreFoundation | grep -v "U " | cut -d " " -f 3 > CF-Lite.symbols
wc -l CF*.symbols
1287 CF-Lite.symbols
1654 CF.symbols
diff CF.symbols CF-Lite.symbols | grep "^< " | wc -l
394
This shows that CF exports 1654 symbols.
The same test with CF-Lite shows that CF-Lite exports 1287 symbols.
Hence, CF-Lite contains about 78% of the symbols of the full CF, and about 22% were stripped away.
It is probably fair to assume that the Darwin sources should either not make use of the 28% of symbols that are missing from CF-Lite, or Apple should release the source for the missing symbols. See Current Blockers for a short list of some of the projects where these missing symbols (and the functions they represent) are causing us problems.
Symbols
In this example, _NSInvalidArgumentException should be exported by CF. (Please note: using the latest PureDarwin darwinbuild patch will automatically build a version of CFLite which now exports this and other NS-domain exceptions.)
nm -an /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation | grep _NSInvalidArgumentException
``
0013b444 **S** _NSInvalidArgumentException
nm -an /System/Library/Frameworks/Foundation.framework/Foundation | grep _NSInvalidArgumentException
U _NSInvalidArgumentException
00272c70 S $ld$add$os10.4$_NSInvalidArgumentException
- U means “it is somewhere else”
- S means “it exports it”
Missing exported symbols
Here is a list of the 22% exported symbols that are missing from CF-Lite when compared to the full CF:
diff CF.symbols CF-Lite.symbols | grep “^< “
Whenever you encounter a message that includes one of the follwing symbol names, then it might well be due to the difference between CF and CF-Lite.
- $ld$hide$os10.4$.objc_class_name_NSArray
- $ld$hide$os10.4$.objc_class_name_NSCalendar
- $ld$hide$os10.4$.objc_class_name_NSData
- $ld$hide$os10.4$.objc_class_name_NSDate
- $ld$hide$os10.4$.objc_class_name_NSDateComponents
- $ld$hide$os10.4$.objc_class_name_NSDictionary
- $ld$hide$os10.4$.objc_class_name_NSEnumerator
- $ld$hide$os10.4$.objc_class_name_NSException
- $ld$hide$os10.4$.objc_class_name_NSInputStream
- $ld$hide$os10.4$.objc_class_name_NSInvocation
- $ld$hide$os10.4$.objc_class_name_NSLocale
- $ld$hide$os10.4$.objc_class_name_NSMethodSignature
- $ld$hide$os10.4$.objc_class_name_NSMutableArray
- $ld$hide$os10.4$.objc_class_name_NSMutableData
- $ld$hide$os10.4$.objc_class_name_NSMutableDictionary
- $ld$hide$os10.4$.objc_class_name_NSMutableSet
- $ld$hide$os10.4$.objc_class_name_NSNull
- $ld$hide$os10.4$.objc_class_name_NSObject
- $ld$hide$os10.4$.objc_class_name_NSOutputStream
- $ld$hide$os10.4$.objc_class_name_NSRunLoop
- $ld$hide$os10.4$.objc_class_name_NSSet
- $ld$hide$os10.4$.objc_class_name_NSStream
- $ld$hide$os10.4$.objc_class_name_NSTimeZone
- $ld$hide$os10.4$.objc_class_name_NSTimer
- $ld$hide$os10.4$.objc_class_name_NSUserDefaults
- $ld$hide$os10.4$_NSBuddhistCalendar
- $ld$hide$os10.4$_NSChineseCalendar
- $ld$hide$os10.4$_NSCurrentLocaleDidChangeNotification
- $ld$hide$os10.4$_NSDefaultRunLoopMode
- $ld$hide$os10.4$_NSGenericException
- $ld$hide$os10.4$_NSGetSizeAndAlignment
- $ld$hide$os10.4$_NSGregorianCalendar
- $ld$hide$os10.4$_NSHebrewCalendar
- $ld$hide$os10.4$_NSInternalInconsistencyException
- $ld$hide$os10.4$_NSInvalidArgumentException
- $ld$hide$os10.4$_NSIslamicCalendar
- $ld$hide$os10.4$_NSIslamicCivilCalendar
- $ld$hide$os10.4$_NSJapaneseCalendar
- $ld$hide$os10.4$_NSLocaleCalendar
- $ld$hide$os10.4$_NSLocaleCollationIdentifier
- $ld$hide$os10.4$_NSLocaleCountryCode
- $ld$hide$os10.4$_NSLocaleCurrencyCode
- $ld$hide$os10.4$_NSLocaleCurrencySymbol
- $ld$hide$os10.4$_NSLocaleDecimalSeparator
- $ld$hide$os10.4$_NSLocaleExemplarCharacterSet
- $ld$hide$os10.4$_NSLocaleGroupingSeparator
- $ld$hide$os10.4$_NSLocaleIdentifier
- $ld$hide$os10.4$_NSLocaleLanguageCode
- $ld$hide$os10.4$_NSLocaleMeasurementSystem
- $ld$hide$os10.4$_NSLocaleScriptCode
- $ld$hide$os10.4$_NSLocaleUsesMetricSystem
- $ld$hide$os10.4$_NSLocaleVariantCode
- $ld$hide$os10.4$_NSMallocException
- $ld$hide$os10.4$_NSRangeException
- $ld$hide$os10.4$_NSRunLoopCommonModes
- $ld$hide$os10.4$_NSStreamDataWrittenToMemoryStreamKey
- $ld$hide$os10.4$_NSStreamFileCurrentOffsetKey
- $ld$hide$os10.4$_NSStreamSOCKSProxyConfigurationKey
- $ld$hide$os10.4$_NSStreamSOCKSProxyHostKey
- $ld$hide$os10.4$_NSStreamSOCKSProxyPasswordKey
- $ld$hide$os10.4$_NSStreamSOCKSProxyPortKey
- $ld$hide$os10.4$_NSStreamSOCKSProxyUserKey
- $ld$hide$os10.4$_NSStreamSOCKSProxyVersion4
- $ld$hide$os10.4$_NSStreamSOCKSProxyVersion5
- $ld$hide$os10.4$_NSStreamSOCKSProxyVersionKey
- $ld$hide$os10.4$_NSStreamSocketSecurityLevelKey
- $ld$hide$os10.4$_NSStreamSocketSecurityLevelNegotiatedSSL
- $ld$hide$os10.4$_NSStreamSocketSecurityLevelNone
- $ld$hide$os10.4$_NSStreamSocketSecurityLevelSSLv2
- $ld$hide$os10.4$_NSStreamSocketSecurityLevelSSLv3
- $ld$hide$os10.4$_NSStreamSocketSecurityLevelTLSv1
- $ld$hide$os10.4$_NSSystemTimeZoneDidChangeNotification
- .objc_category_name_CFXPreferencesPropertyListSource_CFXPreferencesSPIAdditions
- .objc_class_name_CFXPreferencesCompatibilitySource
- .objc_class_name_CFXPreferencesManagedSource
- .objc_class_name_CFXPreferencesPropertyListSource
- .objc_class_name_CFXPreferencesSearchListSource
- .objc_class_name_CFXPreferencesSource
- .objc_class_name_NSArray
- .objc_class_name_NSCalendar
- .objc_class_name_NSData
- .objc_class_name_NSDate
- .objc_class_name_NSDateComponents
- .objc_class_name_NSDictionary
- .objc_class_name_NSEnumerator
- .objc_class_name_NSException
- .objc_class_name_NSInputStream
- .objc_class_name_NSInvocation
- .objc_class_name_NSLocale
- .objc_class_name_NSMessageBuilder
- .objc_class_name_NSMethodSignature
- .objc_class_name_NSMutableArray
- .objc_class_name_NSMutableData
- .objc_class_name_NSMutableDictionary
- .objc_class_name_NSMutableOrderedSet
- .objc_class_name_NSMutableSet
- .objc_class_name_NSNull
- .objc_class_name_NSObject
- .objc_class_name_NSOrderedSet
- .objc_class_name_NSOutputStream
- .objc_class_name_NSRunLoop
- .objc_class_name_NSSet
- .objc_class_name_NSStream
- .objc_class_name_NSTimeZone
- .objc_class_name_NSTimer
- .objc_class_name_NSUserDefaults
- .objc_class_name__NSZombie_
- .objc_class_name___NSArrayReverseEnumerator
- .objc_class_name___NSCFArray
- .objc_class_name___NSCFDate
- .objc_class_name___NSCFDictionary
- .objc_class_name___NSCFOrderedSet
- .objc_class_name___NSCFSet
- .objc_class_name___NSDictionaryObjectEnumerator
- .objc_class_name___NSFastEnumerationEnumerator
- .objc_class_name___NSOrderedSetReverseEnumerator
- .objc_class_name___NSPlaceholderArray
- .objc_class_name___NSPlaceholderDate
- .objc_class_name___NSPlaceholderDictionary
- .objc_class_name___NSPlaceholderOrderedSet
- .objc_class_name___NSPlaceholderSet
- _CFAttributedStringBeginEditing
- _CFAttributedStringCreate
- _CFAttributedStringCreateCopy
- _CFAttributedStringCreateMutable
- _CFAttributedStringCreateMutableCopy
- _CFAttributedStringCreateWithSubstring
- _CFAttributedStringEndEditing
- _CFAttributedStringGetAttribute
- _CFAttributedStringGetAttributeAndLongestEffectiveRange
- _CFAttributedStringGetAttributes
- _CFAttributedStringGetAttributesAndLongestEffectiveRange
- _CFAttributedStringGetLength
- _CFAttributedStringGetMutableString
- _CFAttributedStringGetString
- _CFAttributedStringGetTypeID
- _CFAttributedStringOpenUText
- _CFAttributedStringRemoveAttribute
- _CFAttributedStringReplaceAttributedString
- _CFAttributedStringReplaceString
- _CFAttributedStringSetAttribute
- _CFAttributedStringSetAttributes
- _CFBundleCloseBundleResourceMap
- _CFBundleOpenBundleResourceFiles
- _CFBundleOpenBundleResourceMap
- _CFFileDescriptorCreate
- _CFFileDescriptorCreateRunLoopSource
- _CFFileDescriptorDisableCallBacks
- _CFFileDescriptorEnableCallBacks
- _CFFileDescriptorGetContext
- _CFFileDescriptorGetNativeDescriptor
- _CFFileDescriptorGetTypeID
- _CFFileDescriptorInvalidate
- _CFFileDescriptorIsValid
- _CFGetExecutableLinkedLibraryVersion
- _CFGetExecutingLibraryVersion
- _CFLocaleGetLanguageRegionEncodingForLocaleIdentifier
- _CFLogTest
- _CFMutableAttributedStringOpenUText
- _CFMutableStringOpenUText
- _CFNotificationCenterAddObserver
- _CFNotificationCenterGetDarwinNotifyCenter
- _CFNotificationCenterGetDistributedCenter
- _CFNotificationCenterGetLocalCenter
- _CFNotificationCenterGetTypeID
- _CFNotificationCenterIsSuspended
- _CFNotificationCenterPostNotification
- _CFNotificationCenterPostNotificationWithOptions
- _CFNotificationCenterRemoveEveryObserver
- _CFNotificationCenterRemoveObserver
- _CFNotificationCenterSetSuspended
- _CFPasteboardApplyFunction
- _CFPasteboardBeginGeneration
- _CFPasteboardCopyData
- _CFPasteboardCopyFlavorsForItem
- _CFPasteboardCopyItemsAndFlavors
- _CFPasteboardCopyName
- _CFPasteboardCreate
- _CFPasteboardCreateDataForString
- _CFPasteboardCreateStringFromData
- _CFPasteboardCreateUnique
- _CFPasteboardGetChangeCount
- _CFPasteboardGetDataFlags
- _CFPasteboardGetFlavorCount
- _CFPasteboardGetGenerationCount
- _CFPasteboardGetItemAtIndex
- _CFPasteboardGetItemCount
- _CFPasteboardGetTypeID
- _CFPasteboardIsDataPromised
- _CFPasteboardPromiseData
- _CFPasteboardResolveAllPromisedData
- _CFPasteboardResolvePromisedData
- _CFPasteboardSetData
- _CFPasteboardSetDataFlags
- _CFPasteboardSetPasteLocation
- _CFPreferencesAppValueIsForced
- _CFRunArrayCreate
- _CFRunArrayDelete
- _CFRunArrayGetCount
- _CFRunArrayGetTypeID
- _CFRunArrayGetValueAtIndex
- _CFRunArrayGetValueAtRunArrayIndex
- _CFRunArrayInsert
- _CFRunArrayReplace
- _CFServiceControllerCanConnect
- _CFServiceControllerCopyServicesEntries
- _CFServiceControllerGetRegisteredProvider
- _CFServiceControllerPerformService
- _CFServiceControllerPromiseServiceEntries
- _CFServiceControllerRegisterProvider
- _CFServiceControllerSetServicesEntries
- _CFStreamCreateBoundPair
- _CFStringOpenUText
- _CFStringTokenizerAdvanceToNextToken
- _CFStringTokenizerCopyBestStringLanguage
- _CFStringTokenizerCopyCurrentTokenAttribute
- _CFStringTokenizerCreate
- _CFStringTokenizerGetCurrentSubTokens
- _CFStringTokenizerGetCurrentTokenRange
- _CFStringTokenizerGetTypeID
- _CFStringTokenizerGoToTokenAtIndex
- _CFStringTokenizerSetString
- _CFStringTransform
- _CFURLCreateFromFSRef
- _CFURLGetFSRef
- _CFUniCharApplyUnicodeBidiAlgorithm
- _CFUniCharGetBidiCategory
- _CFUniCharGetFirstBidiParagraphLength
- _NSBuddhistCalendar
- _NSChineseCalendar
- _NSCurrentLocaleDidChangeNotification
- _NSDefaultRunLoopMode
- _NSGenericException
- _NSGetSizeAndAlignment
- _NSGregorianCalendar
- _NSHebrewCalendar
- _NSInternalInconsistencyException
- _NSInvalidArgumentException
- _NSIslamicCalendar
- _NSIslamicCivilCalendar
- _NSJapaneseCalendar
- _NSLocaleCalendar
- _NSLocaleCollationIdentifier
- _NSLocaleCountryCode
- _NSLocaleCurrencyCode
- _NSLocaleCurrencySymbol
- _NSLocaleDecimalSeparator
- _NSLocaleExemplarCharacterSet
- _NSLocaleGroupingSeparator
- _NSLocaleIdentifier
- _NSLocaleLanguageCode
- _NSLocaleMeasurementSystem
- _NSLocaleScriptCode
- _NSLocaleUsesMetricSystem
- _NSLocaleVariantCode
- _NSMallocException
- _NSRangeException
- _NSRunLoopCommonModes
- _NSStreamDataWrittenToMemoryStreamKey
- _NSStreamFileCurrentOffsetKey
- _NSStreamSOCKSProxyConfigurationKey
- _NSStreamSOCKSProxyHostKey
- _NSStreamSOCKSProxyPasswordKey
- _NSStreamSOCKSProxyPortKey
- _NSStreamSOCKSProxyUserKey
- _NSStreamSOCKSProxyVersion4
- _NSStreamSOCKSProxyVersion5
- _NSStreamSOCKSProxyVersionKey
- _NSStreamSocketSecurityLevelKey
- _NSStreamSocketSecurityLevelNegotiatedSSL
- _NSStreamSocketSecurityLevelNone
- _NSStreamSocketSecurityLevelSSLv2
- _NSStreamSocketSecurityLevelSSLv3
- _NSStreamSocketSecurityLevelTLSv1
- _NSSystemTimeZoneDidChangeNotification
- __CFAppVersionCheck
- __CFAppVersionCheckLessThan
- __CFArrayIsMutable
- __CFAttributedStringCheckAndReplace
- __CFAttributedStringCheckAndReplaceAttributed
- __CFAttributedStringCheckAndSetAttribute
- __CFAttributedStringCheckAndSetAttributes
- __CFAttributedStringCreateWithRuns
- __CFAttributedStringGetLength
- __CFAttributedStringGetNumberOfRuns
- __CFAttributedStringGetRuns
- __CFAttributedStringIsMutable
- __CFBagIsMutable
- __CFBundleCloseBundleResourceFork
- __CFBundleCopyInfoDictionaryInResourceFork
- __CFBundleCreateIfMightBeBundle
- __CFBundleCreateWithExecutableURLIfMightBeBundle
- __CFBundleOpenBundleResourceFork
- __CFCharacterSetIsMutable
- __CFCreateURLFromFSSpec
- __CFDNStart
- __CFDictionaryIsMutable
- __CFDoExceptionOperation
- __CFGetFSSpecFromURL
- __CFLocaleGetNoteCount
- __CFLogvEx
- __CFNotificationCenterForLocalNotifications
- __CFPreferencesCopyValueNoCache
- __CFPreferencesCreatePathToUsersManagedPrefsDirectory
- __CFPreferencesIsManaged
- __CFPreferencesManagementStatusChangedForDomains
- __CFPreferencesPostValuesChangedInDomains
- __CFPreferencesWriteDomainDictionaryToPath
- __CFPreferencesWriteManagedDomainForUser
- __CFPropertListCreateFromFrozen
- __CFPropertyListCopyShared
- __CFPropertyListCreateFrozen
- __CFPropertyListShare
- __CFRunArrayCreateWithGuts
- __CFSetIsMutable
- __CFStringTokenizerGetDerivedTokens
- __CFStringTokenizerTokenize
- __CFStringTokenizerTokenizeCompoundWord
- __CFURLCopyAliasFromPropertyListRepresentation
- __CFURLCopyExtendedPropertyListPrimitive
- __CFURLCopyExtendedPropertyListRepresentation
- __CFUserNotificationSetWarningThread
- __CFXNotificationCenterCreate
- __CFXNotificationCenterIsEmpty
- __CFXNotificationGetHostCenter
- __CFXNotificationGetSuspended
- __CFXNotificationGetTaskCenter
- __CFXNotificationPost
- __CFXNotificationPostNotification
- __CFXNotificationRegister
- __CFXNotificationResetSessionForTask
- __CFXNotificationSetSuspended
- __CFXNotificationUnregister
- __CFXPreferencesCopyDictionaryForApplicationPreferences
- __CFXPreferencesCopyDictionaryForNamedVolatileSource
- __CFXPreferencesCopyDictionaryForSourceWithBundleID
- __CFXPreferencesCopyLanguageList
- __CFXPreferencesCopyVolatileSourceNames
- __CFXPreferencesRegisterDefaultValues
- __CFXPreferencesRemoveNamedVolatileSource
- __CFXPreferencesReplaceValuesInNamedVolatileSource
- __CFXPreferencesReplaceValuesInSourceWithBundleID
- __CFXPreferencesSetUserDefaultsPointer
- __CF_forwarding_prep_0
- __NSExceptionGetRubyToken
- __NSExceptionSetRubyToken
- __NSMessageBuilder
- ___CFAttributedStringCreateMutableWithSubstring
- ___CFAttributedStringMtbl
- ___CFDoExternRefOperation
- ___CFOAInitialize
- ___CFOASafe
- ___CFPBStart
- ___CFRecordAllocationEvent
- ___CFRuntimeObjCClassTable
- ___CFSetLastAllocationEventName
- ___CFStringIsMutable
- ___CFStringMtbl
- ____CFA2UC
- _crashreporter_info
- __kCFBundleResourceSpecificationKey
- _kCFErrorDomainCoreFoundation
- _kCFManagedPreferencesMCXNotificationName
- _kCFManagedPreferencesMCXObjectName
- _kCFNotificationAnyName
- _kCFNotificationAnyObject
- _kCFPasteboardFind
- _kCFPasteboardGeneral
- _kCFPreferencesDidChangeNotificationName
- _kCFPreferencesDidChangeObject
- _kCFServiceControllerActivateKey
- _kCFServiceControllerErrorKey
- _kCFServiceControllerMessageKey
- _kCFServiceControllerPasteboardKey
- _kCFServiceControllerProviderKey
- _kCFServiceControllerResultKey
- _kCFServiceControllerServicesChangedNotification
- _kCFServiceControllerUserDataKey
- _kCFStringTransformFullwidthHalfwidth
- _kCFStringTransformHiraganaKatakana
- _kCFStringTransformLatinArabic
- _kCFStringTransformLatinCyrillic
- _kCFStringTransformLatinGreek
- _kCFStringTransformLatinHangul
- _kCFStringTransformLatinHebrew
- _kCFStringTransformLatinHiragana
- _kCFStringTransformLatinKatakana
- _kCFStringTransformLatinThai
- _kCFStringTransformMandarinLatin
- _kCFStringTransformStripCombiningMarks
- _kCFStringTransformStripDiacritics
- _kCFStringTransformToLatin
- _kCFStringTransformToUnicodeName
- _kCFStringTransformToXMLHex
Symbols vanished from CF-Lite
An old CF-Lite, CoreFoundation-262.tar.gz (source CoreFoundation-262-src.tar.gz) from 2002, exported the following symbols which the recent version of CF-Lite does no longer appear to export:
- _CFArrayGetTypeID
- _CFArrayCreateMutable
- __CFArrayCreate_ex
- _CFArrayContainsValue
- _CFArrayGetValueAtIndex
- _CFArrayGetValues
- _CFArrayApplyFunction
- _CFArrayAppendValue
- _CFArraySetValueAtIndex
- _CFArrayExchangeValuesAtIndices
- _CFArrayRemoveValueAtIndex
- __CFArraySetCapacity
- __CFArrayIsMutable
- _CFArrayBSearchValues
- _CFArrayAppendArray
- _CFBagGetTypeID
- _CFBagCreateMutable
- __CFBagSetContext
- _CFBagContainsValue
- _CFBagApplyFunction
- __CFBagSetCapacity
- _CFBagAddValue
- _CFBagRemoveValue
- _CFBagRemoveAllValues
- ___CFRangeMake
- _CFNullGetTypeID
- _CFAllocatorGetTypeID
- _CFAllocatorGetDefault
- _CFAllocatorSetDefault
- _CFAllocatorCreate
- _CFAllocatorAllocate
- _CFAllocatorReallocate
- _CFAllocatorDeallocate
- _CFAllocatorGetPreferredSizeForSize
- _CFAllocatorGetContext
- __CFRuntimeSetCFMPresent
- _CFBinaryHeapGetTypeID
- _CFBinaryHeapContainsValue
- _CFBinaryHeapApplyFunction
- _CFBinaryHeapAddValue
- _CFBinaryHeapRemoveMinimumValue
- __CFKeyedArchiverUIDGetTypeID
- __CFKeyedArchiverUIDCreate
- __CFKeyedArchiverUIDGetValue
- ___CFBinaryPlistWriteToStream
- ___CFBinaryPlistGetTopLevelInfo
- ___CFBinaryPlistGetOffsetForValueFromArray
- ___CFBinaryPlistGetOffsetForValueFromDictionary
- ___CFBinaryPlistCreateObject
- _CFBitVectorGetTypeID
- _CFBitVectorCreateMutable
- _CFBitVectorGetCount
- _CFBitVectorGetCountOfBit
- _CFBitVectorContainsBit
- _CFBitVectorSetCount
- _CFBitVectorFlipBitAtIndex
- _CFBitVectorFlipBits
- _CFBitVectorSetAllBits
- _CFStringEncodingIsValidCombiningCharacterForLatin1
- _CFStringEncodingPrecomposeLatinCharacter
- __CFBundleCopyBundleURLForExecutableURL
- __CFBundleCreateIfLooksLikeBundle
- __CFBundleGetMainBundleIfLooksLikeBundle
- __CFBundleCreateWithExecutableURLIfLooksLikeBundle
- _CFBundleGetMainBundle
- _CFBundleGetBundleWithIdentifier
- _CFBundleGetTypeID
- _CFBundleCreate
- _CFBundleCreateBundlesFromDirectory
- __CFBundleSetDefaultLocalization
- _CFBundleCopyInfoDictionaryInDirectory
- _CFBundleGetInfoDictionary
- __CFBundleGetLocalInfoDictionary
- _CFBundleGetLocalInfoDictionary
- __CFBundleGetValueForInfoKey
- _CFBundleGetValueForInfoDictionaryKey
- _CFBundleGetIdentifier
- _CFBundleGetVersionNumber
- _CFBundleGetDevelopmentRegion
- __CFBundleGetHasChanged
- _CFBundleCopySupportFilesDirectoryURL
- _CFBundleCopyResourcesDirectoryURL
- __CFBundleCopyResourceForkURL
- __CFBundleCopyExecutableURLInDirectory
- __CFBundleCopyOtherExecutableURLInDirectory
- _CFBundleCopyAuxiliaryExecutableURL
- _CFBundleIsExecutableLoaded
- __CFBundleCopyFileTypeForFileURL
- __CFBundleSetCFMConnectionID
- _CFBundleLoadExecutable
- _CFBundleUnloadExecutable
- _CFBundleGetFunctionPointerForName
- __CFBundleGetCFMFunctionPointerForName
- _CFBundleGetFunctionPointersForNames
- __CFBundleGetCFMFunctionPointersForNames
- _CFBundleGetDataPointerForName
- _CFBundleGetDataPointersForNames
- _CFBundleGetPlugIn
- _CFBundleGetAllBundles
- __CFBundleLayoutVersion
- __CFBundleCopyInfoPlistURL
- __CFBundleCopyPrivateFrameworksURL
- __CFBundleCopySharedFrameworksURL
- _CFBundleCopySharedFrameworksURL
- __CFBundleCopySharedSupportURL
- _CFBundleCopySharedSupportURL
- _CFBundleCopyBuiltInPlugInsURL
- __CFBundleFlushCaches
- __CFFindBundleResources
- _CFBundleCopyResourceURLsOfType
- __CFBundleCopyResourceURLForLanguage
- __CFBundleCopyResourceURLsOfTypeForLanguage
- _CFBundleCopyResourceURLsOfTypeForLocalization
- _CFBundleCopyLocalizedString
- _CFBundleCopyLocalizationForLocalizationInfo
- __CFBundleGetLanguageAndRegionCodes
- _CFBundleCopyLocalizationsForPreferences
- _CFBundleCopyPreferredLocalizationsFromArray
- __CFBundleURLLooksLikeBundle
- __CFBundleGetPackageInfoInDirectory
- _CFBundleCopyBundleLocalizations
- _CFBundleCopyInfoDictionaryForURL
- _CFBundleCopyLocalizationsForURL
- _CFCharacterSetGetTypeID
- _CFCharacterSetGetPredefined
- _CFCharacterSetCreateWithCharactersInRange
- _CFCharacterSetCreateWithCharactersInString
- _CFCharacterSetCreateWithBitmapRepresentation
- _CFCharacterSetIsSurrogatePairMember
- _CFCharacterSetHasMemberInPlane
- _CFCharacterSetCreateBitmapRepresentation
- _CFCharacterSetAddCharactersInRange
- _CFCharacterSetAddCharactersInString
- _CFCharacterSetIntersect
- _CFCharacterSetInvert
- _CFCharacterSetCompact
- _CFCharacterSetFast
- __CFCharacterSetGetKeyedCodingType
- __CFCharacterSetIsMutable
- __CFCharacterSetGetKeyedCodingBuiltinType
- __CFCharacterSetGetKeyedCodingRange
- __CFCharacterSetCreateKeyedCodingString
- __CFCharacterSetIsInverted
- __CFCharacterSetSetIsInverted
- _CFDataGetTypeID
- _CFDataCreateWithBytesNoCopy
- _CFDataGetLength
- _CFDataGetMutableBytePtr
- _CFDataSetLength
- _CFDataAppendBytes
- _CFDataDeleteBytes
- _CFAbsoluteTimeGetCurrent
- _CFDateGetTypeID
- _CFDateCompare
- _CFGregorianDateIsValid
- _CFGregorianDateGetAbsoluteTime
- _CFAbsoluteTimeGetGregorianDate
- _CFAbsoluteTimeAddGregorianUnits
- _CFAbsoluteTimeGetDifferenceAsGregorianUnits
- _CFAbsoluteTimeGetDayOfWeek
- _CFAbsoluteTimeGetDayOfYear
- _CFAbsoluteTimeGetWeekOfYear
- _CFDictionaryGetTypeID
- _CFDictionaryCreateMutable
- __CFDictionaryCreate_ex
- __CFDictionarySetContext
- _CFDictionaryContainsKey
- _CFDictionaryContainsValue
- _CFDictionaryGetValue
- _CFDictionaryGetValueIfPresent
- _CFDictionaryApplyFunction
- __CFDictionarySetCapacity
- __CFDictionaryIsMutable
- _CFDictionaryAddValue
- _CFDictionaryRemoveValue
- _CFDictionaryRemoveAllValues
- __CFMachPortInstallNotifyPort
- _CFMachPortGetTypeID
- _CFMachPortGetPort
- _CFMachPortGetInvalidationCallBack
- _CFMachPortGetQueuedMessageCount
- _CFMachPortInvalidateAll
- _CFMachPortCreateRunLoopSource
- _CFMessagePortGetTypeID
- _CFMessagePortIsRemote
- _CFMessagePortGetName
- _CFMessagePortSetName
- _CFMessagePortGetInvalidationCallBack
- _CFMessagePortSetInvalidationCallBack
- _CFMessagePortCreateRunLoopSource
- _CFNotificationCenterGetTypeID
- _CFNotificationCenterGetDistributedCenter
- _CFNotificationCenterAddObserver
- _CFNotificationCenterRemoveObserver
- _CFNotificationCenterRemoveEveryObserver
- _CFNotificationCenterPostNotification
- _CFBooleanGetTypeID
- _CFBooleanGetValue
- _CFNumberGetTypeID
- _CFNumberGetType
- _CFNumberIsFloatType
- _CFNumberCompare
- __CFArgv
- __CFArgc
- __CFGetProgname
- __CFProcessPath
- __CFCreateHomeDirectoryURLForUser
- _CFGetUserName
- _CFCopyHomeDirectoryURLForUser
- _CFPlugInUnregisterFactory
- _CFPlugInUnregisterPlugInType
- _CFPlugInAddInstanceForFactory
- _CFPlugInInstanceGetTypeID
- _CFPlugInInstanceCreateWithInstanceDataSize
- _CFPlugInInstanceGetInterfaceFunctionTable
- _CFPlugInInstanceGetFactoryName
- _CFPlugInInstanceGetInstanceData
- _CFPlugInGetTypeID
- _CFPlugInCreate
- _CFPlugInGetBundle
- _CFPlugInIsLoadOnDemand
- _CFPreferencesSetAppValue
- _CFPreferencesAddSuitePreferencesToApp
- _CFPreferencesAppSynchronize
- _CFPreferencesCopyValue
- _CFPreferencesCopyMultiple
- _CFPreferencesSetValue
- _CFPreferencesCopyApplicationList
- _CFPreferencesCopyKeyList
- _CFPreferencesAppValueIsForced
- __CFDoOperation
- _CFPropertyListIsValid
- _CFPropertyListCreateXMLData
- __CFPropertyListCreateXMLDataWithExtras
- ___CFSetNastyFile
- _CFPropertyListCreateFromXMLData
- _CFRunLoopGetTypeID
- __CFRunLoopSetCurrent
- __CFRunLoopSetMain
- _CFRunLoopCopyCurrentMode
- _CFRunLoopCopyAllModes
- _CFRunLoopAddCommonMode
- __CFRunLoopFinished
- _CFRunLoopRun
- _CFRunLoopRunSpecific
- _CFRunLoopRunInMode
- _CFRunLoopWakeUp
- _CFRunLoopStop
- __CFRunLoopStopMode
- __CFRunLoopModeContainsMode
- __CFRunLoopAddModeToMode
- __CFRunLoopRemoveModeFromMode
- _CFRunLoopContainsSource
- _CFRunLoopAddSource
- _CFRunLoopRemoveSource
- _CFRunLoopContainsObserver
- _CFRunLoopAddObserver
- _CFRunLoopContainsTimer
- _CFRunLoopAddTimer
- _CFRunLoopSourceGetTypeID
- _CFRunLoopSourceGetContext
- _CFRunLoopObserverGetTypeID
- _CFRunLoopObserverCreate
- _CFRunLoopObserverGetActivities
- _CFRunLoopObserverGetOrder
- _CFRunLoopObserverDoesRepeat
- _CFRunLoopObserverInvalidate
- _CFRunLoopObserverIsValid
- _CFRunLoopObserverGetContext
- _CFRunLoopTimerGetTypeID
- _CFRunLoopTimerGetNextFireDate
- _CFRunLoopTimerSetNextFireDate
- _CFRunLoopTimerGetInterval
- _CFRunLoopTimerGetContext
- ___CFOAInitialize
- ___CFRecordAllocationEvent
- ___CFSetLastAllocationEventName
- __CFRuntimeRegisterClass
- __CFRuntimeGetClassWithTypeID
- __CFRuntimeUnregisterClassWithTypeID
- __CFRuntimeCreateInstance
- __CFRuntimeSetInstanceTypeID
- _CFTypeGetTypeID
- _CFGetTypeID
- _CFCopyTypeIDDescription
- _CFRetain
- _CFRelease
- _CFGetRetainCount
- _CFEqual
- _CFHash
- _CFCopyDescription
- _CFGetAllocator
- ___CFInitialize
- _CFSetGetTypeID
- _CFSetCreateMutable
- __CFSetSetContext
- _CFSetContainsValue
- _CFSetApplyFunction
- __CFSetSetCapacity
- __CFSetIsMutable
- _CFSetAddValue
- _CFSetRemoveValue
- _CFSetRemoveAllValues
- _CFSocketGetTypeID
- _CFSocketSetAddress
- _CFSocketCreateConnectedToSocketSignature
- _CFSocketInvalidate
- _CFSocketIsValid
- _CFSocketGetNative
- _CFSocketCopyAddress
- _CFSocketCopyPeerAddress
- _CFSocketGetContext
- _CFSocketGetSocketFlags
- _CFSocketSetSocketFlags
- _CFSocketCreateRunLoopSource
- _CFSocketSendData
- _CFSocketRegisterValue
- _CFSocketCopyRegisteredValue
- _CFSocketCopyRegisteredSocketSignature
- _CFSocketUnregister
- _CFSocketGetDefaultNameRegistryPortNumber
- _CFMergeSortArray
- _CFQSortArray
- ___CFStorageGetCapacity
- ___CFStorageGetValueSize
- _CFStorageGetTypeID
- _CFStorageInsertValues
- _CFStorageDeleteValues
- _CFStorageApplyFunction
- __CFStringSetCompatibility
- ___CFStringIsMutable
- ___CFStringIsEightBit
- _CFStringGetSystemEncoding
- _CFStringFileSystemEncoding
- _CFStringGetMaximumSizeForEncoding
- ___CFStringComputeEightBitStringEncoding
- ___CFStringHash
- _CFStringGetTypeID
- ___CFStringCreateImmutableFunnel2
- _CFStringCreateWithPascalString
- _CFStringCreateWithPascalStringNoCopy
- _CFStringCreateWithBytes
- __CFStringCreateWithBytesNoCopy
- _CFStringCreateWithFormatAndArguments
- __CFStringCreateWithFormatAndArgumentsAux
- _CFStringCreateCopy
- ___CFStringMakeConstantString
- _CFStringCreateMutableWithExternalCharactersNoCopy
- _CFStringCreateMutable
- _CFStringCreateMutableCopy
- _CFStringGetLength
- __CFStringGetLength2
- _CFStringGetCharacterAtIndex
- __CFStringCheckAndGetCharacterAtIndex
- _CFStringGetCharacters
- __CFStringCheckAndGetCharacters
- _CFStringGetPascalStringPtr
- _CFStringGetCString
- _CFStringCompareWithOptions
- _CFStringCompare
- _CFStringFindWithOptions
- _CFStringCreateArrayWithFindResults
- _CFStringFind
- _CFStringHasPrefix
- _CFStringHasSuffix
- _CFStringFindCharacterFromSet
- _CFStringGetLineBounds
- _CFStringCreateByCombiningStrings
- _CFStringCreateArrayBySeparatingStrings
- _CFStringCreateFromExternalRepresentation
- _CFStringCreateExternalRepresentation
- _CFStringGetFastestEncoding
- _CFStringGetIntValue
- _CFStringGetDoubleValue
- _CFStringSetExternalCharactersNoCopy
- _CFStringDelete
- _CFStringAppend
- _CFStringAppendCharacters
- _CFStringAppendPascalString
- _CFStringAppendCString
- _CFStringAppendFormat
- _CFStringFindAndReplace
- ___CFStringCheckAndReplace
- ___CFStringNoteErrors
- _CFStringPad
- _CFStringLowercase
- _CFStringCapitalize
- _CFStringNormalize
- _CFStringAppendFormatAndArguments
- __CFStringAppendFormatAndArgumentsAux
- _CFShowStr
- _CFStringEncodingUnicodeToBytes
- _CFStringEncodingBytesToUnicode
- __CFStringEncodingSetForceASCIICompatibility
- ___CFStringDecodeByteStream2
- ___CFStringDecodeByteStream3
- ___CFStringEncodeByteStream
- __CFStringGetFileSystemRepresentation
- _CFStringIsEncodingAvailable
- _CFStringGetListOfAvailableEncodings
- _CFStringGetNameOfEncoding
- _CFStringConvertIANACharSetNameToEncoding
- _CFStringConvertEncodingToIANACharSetName
- _CFStringConvertEncodingToNSStringEncoding
- _CFStringConvertNSStringEncodingToEncoding
- _CFStringConvertEncodingToWindowsCodepage
- _CFStringConvertWindowsCodepageToEncoding
- _CFStringGetMostCompatibleMacStringEncoding
- _CFTimeZoneGetTypeID
- _CFTimeZoneCopySystem
- _CFTimeZoneResetSystem
- _CFTimeZoneSetDefault
- _CFTimeZoneCopyAbbreviationDictionary
- _CFTimeZoneSetAbbreviationDictionary
- _CFTimeZoneCreateWithTimeIntervalFromGMT
- _CFTimeZoneGetName
- _CFTimeZoneCopyAbbreviation
- _CFTreeGetTypeID
- _CFTreeGetChildCount
- _CFTreeGetParent
- _CFTreeGetNextSibling
- _CFTreeGetFirstChild
- _CFTreeGetContext
- _CFTreeSetContext
- _CFTreeApplyFunctionToChildren
- _CFTreePrependChild
- _CFTreeAppendChild
- __CFURLCreateOnlyUTF8CompatibleURLs
- _CFURLCreateStringByReplacingPercentEscapes
- _CFURLCreateStringByAddingPercentEscapes
- _CFURLGetTypeID
- __CFURLAlloc
- __CFStringIsLegalURLString
- __CFURLInitWithString
- _CFURLCreateWithBytes
- _CFURLCreateData
- _CFURLCreateWithString
- _CFURLCopyAbsoluteURL
- _CFURLGetString
- _CFURLGetBaseURL
- _CFURLCopyScheme
- _CFURLCopyStrictPath
- _CFURLHasDirectoryPath
- _CFURLCopyHostName
- _CFURLGetPortNumber
- _CFURLCopyPassword
- _CFURLCopyParameterString
- _CFURLCopyQueryString
- _CFURLCopyFragment
- _CFURLCopyComponents
- _CFURLCreateFromComponents
- ___CFURLReservedPtr
- ___CFURLSetReservedPtr
- __CFURLCreateCurrentDirectoryURL
- _CFURLCreateWithFileSystemPath
- _CFURLCreateWithFileSystemPathRelativeToBase
- _CFURLCopyFileSystemPath
- _CFURLCreateStringWithFileSystemPath
- _CFURLGetFileSystemRepresentation
- _CFURLCreateFromFileSystemRepresentation
- _CFURLCreateFromFileSystemRepresentationRelativeToBase
- _CFURLCopyLastPathComponent
- _CFURLCopyPathExtension
- _CFURLCreateCopyDeletingLastPathComponent
- __CFGetFSSpecFromURL
- __CFCreateURLFromFSSpec
- _CFURLCreateFromFSRef
- _CFURLGetFSRef
- _CFURLWriteDataAndPropertiesToResource
- _CFUUIDGetTypeID
- _CFUUIDCreateWithBytes
- _CFUUIDCreateFromUUIDBytes
- _CFUniCharIsMemberOf
- _CFUniCharGetUnicodePropertyDataForPlane
- _CFUniCharDecomposeCharacter
- _CFUniCharDecompose
- _CFUniCharPrioritySort
- _CFUserNotificationGetTypeID
- _CFUserNotificationCreate
- _CFUserNotificationReceiveResponse
- _CFUserNotificationGetResponseValue
- _CFUserNotificationGetResponseDictionary
- _CFUserNotificationUpdate
- _CFUserNotificationDisplayNotice
- _CFLog2
- _CFHashBytes
- _CFCopySystemVersionString
- __CFCopySystemVersionDictionary
- __CFCopyServerVersionDictionary
- _CFGetExecutableLinkedLibraryVersion
- _CFGetExecutingLibraryVersion
- __CFExecutableLinkedOnOrAfter
- _CFShow
- _CFLog
- _CFXMLNodeGetTypeID
- _CFXMLNodeCreateCopy
- _CFXMLNodeGetTypeCode
- _CFXMLNodeGetString
- _CFXMLParserGetTypeID
- _CFXMLParserGetContext
- _CFXMLParserGetSourceURL
- _CFXMLParserGetLocation
- _CFXMLParserGetLineNumber
- _CFXMLParserCopyErrorDescription
- _CFXMLParserAbort
- _CFXMLParserCreate
- _CFXMLTreeGetNode
- _kCFCoreFoundationVersionString
- _kCFAllocatorDefault
- _kCFAllocatorUseContext
- ___CFBundleMagicNumbersArray
- _kCFAbsoluteTimeIntervalSince1970
- _kCFAbsoluteTimeIntervalSince1904
- _kCFCoreFoundationVersionNumber
- ___CFBundleExtensionsArray
- ___CFBundleLocaleAbbreviationsArray
- ___CFBundleLanguageAbbreviationsArray
- _CFNastyFile
- ___CFOASafe
- ___CFConstantStringClassReference
- ___CFDefaultEightBitStringEncoding
- _kCFTypeArrayCallBacks
- _kCFTypeBagCallBacks
- _kCFCopyStringBagCallBacks
- _kCFNull
- _kCFAllocatorSystemDefault
- _kCFAllocatorMalloc
- _kCFAllocatorNull
- _kCFStringBinaryHeapCallBacks
- _kCFBundleInfoDictionaryVersionKey
- _kCFBundleExecutableKey
- _kCFBundleIdentifierKey
- _kCFBundleVersionKey
- _kCFBundleDevelopmentRegionKey
- _kCFBundleLocalizationsKey
- __kCFBundlePackageTypeKey
- __kCFBundleSignatureKey
- __kCFBundleIconFileKey
- __kCFBundleDocumentTypesKey
- __kCFBundleURLTypesKey
- _kCFBundleNameKey
- __kCFBundleShortVersionStringKey
- __kCFBundleGetInfoStringKey
- __kCFBundleTypeNameKey
- __kCFBundleTypeRoleKey
- __kCFBundleTypeIconFileKey
- __kCFBundleTypeOSTypesKey
- __kCFBundleTypeExtensionsKey
- __kCFBundleTypeMIMETypesKey
- __kCFBundleURLNameKey
- __kCFBundleURLIconFileKey
- __kCFBundleURLSchemesKey
- __kCFBundleOldIconFileKey
- __kCFBundleOldDocumentTypesKey
- __kCFBundleOldTypeNameKey
- __kCFBundleOldTypeRoleKey
- __kCFBundleOldTypeIconFileKey
- __kCFBundleInfoPlistURLKey
- __kCFBundleNumericVersionKey
- __kCFBundleExecutablePathKey
- __kCFBundleCFMLoadAsBundleKey
- __kCFBundleAllowMixedLocalizationsKey
- ___kCFCSetNameControl
- ___kCFCSetNameWhitespace
- ___kCFCSetNameWhitespaceAndNewline
- ___kCFCSetNameDecimalDigit
- ___kCFCSetNameLetter
- ___kCFCSetNameLowercaseLetter
- ___kCFCSetNameUppercaseLetter
- ___kCFCSetNameNonBase
- ___kCFCSetNameDecomposable
- ___kCFCSetNameAlphaNumeric
- ___kCFCSetNamePunctuation
- ___kCFCSetNameIllegal
- ___kCFCSetNameCapitalizedLetter
- ___kCFCSetNameStringTypeFormat
- _kCFTypeDictionaryKeyCallBacks
- _kCFCopyStringDictionaryKeyCallBacks
- _kCFTypeDictionaryValueCallBacks
- _kCFBooleanTrue
- _kCFPlugInDynamicRegistrationKey
- _kCFPlugInUnloadFunctionKey
- _kCFPreferencesCurrentApplication
- _kCFPreferencesCurrentHost
- _kCFRunLoopDefaultMode
- _kCFTypeSetCallBacks
- _kCFCopyStringSetCallBacks
- _kCFSocketNameKey
- _kCFSocketValueKey
- _kCFSocketResultKey
- ___kCFSocketRegistryRequestRunLoopMode
- _kCFEmptyString
- _kCFNSDecimalSeparatorKey
- _kCFURLFileScheme
- _kCFURLLocalhost
- _kCFURLFileExists
- _kCFURLFilePOSIXMode
- _kCFURLFileLength
- _kCFFileURLExists
- _kCFFileURLPOSIXMode
- _kCFFileURLDirectoryContents
- _kCFFileURLSize
- _kCFFileURLLastModificationTime
- _kCFHTTPURLStatusCode
- _kCFHTTPURLStatusLine
- _kCFUserNotificationTokenKey
- _kCFUserNotificationTimeoutKey
- _kCFUserNotificationFlagsKey
- _kCFUserNotificationIconPathKey
- _kCFUserNotificationSoundPathKey
- _kCFUserNotificationLocalizationPathKey
- _kCFUserNotificationTextFieldLabelsKey
- _kCFUserNotificationSoundURLKey
- _kCFUserNotificationAlertHeaderKey
- _kCFUserNotificationAlertMessageKey
- _kCFUserNotificationDefaultButtonTitleKey
- _kCFUserNotificationAlternateButtonTitleKey
- _kCFUserNotificationProgressIndicatorValueKey
- _kCFUserNotificationCheckBoxTitlesKey
- __kCFSystemVersionProductNameKey
- __kCFSystemVersionProductCopyrightKey
- __kCFSystemVersionProductVersionKey
- __kCFSystemVersionProductVersionExtraKey
- __kCFSystemVersionBuildVersionKey
- __kCFSystemVersionProductVersionStringKey
- __kCFSystemVersionBuildStringKey
CFNetwork
CFNetwork is a companion to CoreFoundation, and provides key networking features to applications.
While it was available as part of Darwin 8 (OS X 10.4), with the release of Darwin 9 (OS X 10.5) it became closed source. However, the source code for the last version released under Darwin 8 is still available from Apple, and with minor patching can be made to compile in the darwinbuild chroot.
CFNetwork is part of the CoreServices umbrella framework. CoreServices itself is a basic stub, existing solely to link to the framework under it.
Below as an attachement is a binary version of CFNetwork.framework, wrapped inside a CoreServices.framework. Also included is the CarbonCore.framework, which contains only header files.
Status and testing to date
Code written, compiled and linked to CoreServices on OS X will run successfully on PureDarwinXmas. The CFNetService type (the only part tested so far) operates correctly.
This software is covered by the APSL.
Resources
Apple Introduction to CFNetwork Programming Guide
Code Signing
This page is about binary signature.
Background
As of Mac OS X and Darwin, a Mach-O code signature system (similar in concept to Microsoft AuthentiCode for PE binaries on Windows, and Solaris ELF signing) has been implemented. At least on Darwin, this system is not “formally” used, and no binaries are signed.
On Mac OS X, the code signature system forms part of the basis of the “Seatbelt” GPC (Granular Process Control)/RBAC (Role Based Access Control) mechanism (an implementation detail of the Parental Control feature), and most binaries shipped are signed.
I’ve got a binary, is it signed?
There are probably many ways of checking if a binary is signed on Darwin (although some techniques could also be possible on other operating systems), and Mac OS X ships with tools for checking code signatures.
The otool Way
On Darwin, you can quickly check for the presence of a code signature with otool -l /YourBinaryOfChoice | grep LC_CODE_SIGNATURE. You’re looking for the “cmd LC_CODE_SIGNATURE” line (regardless of whether or not you decided to grep).
Without grepping, output similar to the following is produced:
Load command 13``cmd LC_CODE_SIGNATURE``cmdsize 16``dataoff 574704`` `` ``datasize 7968``
The binary used in the example above was (naturally) otool from Mac OS X Leopard.
Other ways
strings YourBinaryOfChoice | grep “Apple Code Signing Certification Authority”
or
grep -b “Apple Code Signing Certification Authority” YourBinaryOfChoice
Examples on Mac OS X
Inspecting otool
codesign -dvvvv /usr/bin/otool
Executable=/usr/bin/otool
Identifier=com.apple.otool
Format=Mach-O universal (i386 ppc7400)
CodeDirectory v=20001 size=2920 flags=0x0(none) hashes=141+2 location=embedded
CDHash=ea392676d34975966fcc4471c3d85dee70978255
Signature size=4064
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
Info.plist=not bound
Sealed Resources=none
Internal requirements count=0 size=12
The Apple object file utility shipped with Mac OS X is signed, in the contrary of the one built from DarwinBuild.
codesign -dvvvv /Volumes/Builds/9F33/BuildRoot/usr/bin/otool
/Volumes/Builds/9F33/BuildRoot/usr/bin/otool: code object is not signed
Note: No “impurity” detected at ‘codesign’ inspection with ‘otool’, so perhaps it could be build with the DarwinBuild project and be available in PureDarwin.
Verifying the dynamic validity of a process
In this example, we will take ‘launchd’ process, which also run as an ‘init’ replacement.
ps ux -p1
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
root 1 0.0 0.0 600820 552 ?? Ss 9:46PM 0:00.42 /sbin/launchd
codesign -vvvv 1
1: dynamically valid
1: satisfies its Designated Requirement
Note: The “-h” options seems not (yet) documented but remains functional:
codesign -h 1
/sbin/launchd
/mach_kernel
Miscellaneous
Related fields found in Xcode:
Resources
Apple Technical Note TN2206: Mac OS X Code Signing In Depth The Apple Mac OS X 10.5 codesign Manual Page is attached to this page (PDF) Sun Solaris 10 elfsign(1) Manual Page
man codesign
man csreq
Current Blockers
This page lists the current issues we are having that prevent us from making a Darwin 9 ISO. The contents of this page are subject to change.
1. Problems to be solved
1.1 CFOpenDirectory missing in CFOpenDirectory binary root
OpenDirectory framework depends on CFOpenDirectory framework, for which there is both a project and a binary root.
However, the binary root does not contain the actual CFOpenDirectory file (http://darwinbuild.macosforge.org/trac/ticket/50):
otool -L OpenDirectory.root/System/Library/PrivateFrameworks/OpenDirectory.framework/Versions/A/OpenDirectory | grep CFO
/System/Library/PrivateFrameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
(compatibility version 1.0.0, current version 1.0.0)
The sources cannot be built without being patched because it depends on missing CoreFoundation headers (e.g., CoreFoundation/CFBridgingPriv.h) and on DirectoryServiceCore (part of DirectoryService which cannot yet be built too).
1.2 IOHDIXController.kext needed (image boot support)
BinaryDriver IOHDIXController.kext is missing (used to be available under Apple Driver License) in order to use imageboot.
Please let us know if you know a solution.
1.3 OSvKernDSPLib.kext needed (audio support)
BinaryDriver OSvKernDSPLib.kext is missing, consequently IOAudioFamily.kext cannot be loaded resulting in no audio support.
Please let us know if you know a solution.
1.4 Shortage of network drivers
There is a shortage of network drivers (and of other drivers in general) for Darwin.
Of particular concern, the Intel e1000 driver AppleIntel8254XEthernet.kext, needed to run networking under VMWare, while available in OS X are not available for general distribution nor redistributable.
Open source drivers for a vast number of network cards (and hardware of every type) are available for other platforms (e.g., BSD and GNU/Linux). See the Network page for more information.
It would be great if someone skilled in driver programming could port some of these to Darwin (we are told that writing drivers for IOKit is really a rather nice experience).
1.5 SystemConfiguration.framework is incomplete
SystemConfiguration.framework (in the configd package) does not compile, and the binary root made available is incomplete. While some components can be made to compile individually (see the Network page for a download), there are still important components (ATConfig and KernelEventMonitor) missing. KernelEventMonitor can be built (part of configd_plugins which not build because it depends on configd which not build without patch and code sacrifice):
file BuildRoot/private/var/tmp/configd_plugins/configd_plugins-
91.root/System/Library/SystemConfiguration/KernelEventMonitor.bundle/Contents/MacOS/KernelEventMonitor
BuildRoot/private/var/tmp/configd_plugins/configd_plugins-
91.root/System/Library/SystemConfiguration/KernelEventMonitor.bundle/Contents/MacOS/KernelEventMonitor: Mach-O universal binary with 2
architectures
BuildRoot/private/var/tmp/configd_plugins/configd_plugins-
91.root/System/Library/SystemConfiguration/KernelEventMonitor.bundle/Contents/MacOS/KernelEventMonitor (for architecture i386): Mach-O
bundle i386
BuildRoot/private/var/tmp/configd_plugins/configd_plugins-
91.root/System/Library/SystemConfiguration/KernelEventMonitor.bundle/Contents/MacOS/KernelEventMonitor (for architecture ppc7400): Mach-O
bundle ppc
1.6 gdb does not compile
Software development (for example, of PureFoundation or device drivers) is hampered by the lack of a native debugged for Darwin. gdb uses parts of the old Carbon runtime in a single component. However, this is preventing the package as a whole from compiling. Non-Apple gdb cannot be used because it does not understand Darwin’s Mach-O binary format. (You only need to install DebugSymbols.framework and CoreServices.framework into PureDarwin Xmas to get gdb running, but since these are closed-source and non-distributable you wouldn’t want to do that, would you?)
1.7 DirectoryService daemon depends on missing CFLite functions
DirectoryServices, the daemon responsible for (surprise surprise) Directory Services, makes use of CFFileDescriptors and CFNotificationCenters, neither of which are present in the current release of CFLite. The latest patched CFLite produced as part of the PureFoundation project includes basic implementations of these functions which allows DirectoryService to run.
2. Problems with partial workarounds
2.1 OpenDirectory depends on Foundation
OpenDirectory depends on Foundation which is not available in Darwin. This is a vital component of Darwin linked implicitly to the login infrastructure, consequently multi-user mode fails.
passwd
dyld: Library not loaded: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
Referenced from: /System/Library/PrivateFrameworks/OpenDirectory.framework/Versions/A/OpenDirectory
The dependency of the OpenDirectory project on Foundation should be removed. http://darwinbuild.macosforge.org/trac/ticket/49 See Foundation replacement called PureFoundation.
2.2 launchd does not build
This is a mission critical component of Darwin. http://darwinbuild.macosforge.org/trac/ticket/9 Maybe related: “Logged as radar 5802196: Unable to build TOT launchd from macosforge.org” (source)
Patched its sources. Please let us know if you know a cleaner solution.
2.3 IOKitUser does not build
Patched its sources. Please let us know if you know a cleaner solution.
3. Problems that are problems no more
3.1 diskarbitrationd fails with “_SCSerialize() failure” errors
This was caused by CFLite not supporting a certain mode of operation of a particular CF function. Building CFLite with the latest PureDarwin patch will restore this functionality and allow diskarbitrationd to run correctly.
3.2 CF missing symbols
__kCFBundleResourceSpecificationKey referenced by some dependents (e.g., Security framework) is expected in CF but missing. Patching the source code to restore this symbol and others (for example, exception names) has proved successful. To apply these patches, follows the instructions for initialising the darwinbuild environment as described in Using DarwinBuild.
3.3 libauto.dylib missing
Apple has released autozone-77 under the Apache License 2.0. Thanks, Apple!
Darwin mailing lists
Example of how to build a plist for Darwinbuild if a project requires it and it’s not in the default SDK from Xcode.
<key>AppleI386PCI</key>
<dict>
<key>dependencies</key>
<dict>
<key>build</key>
<array>
<string>bash</string>
<string>distcc</string>
<string>file_cmds</string>
<string>gcc</string>
<string>gcc_os</string>
<string>gcc_select</string>
<string>jam</string>
<string>shell_cmds</string>
<string>system_cmds</string>
<string>text_cmds</string>
</array>
<key>header</key>
<array>
<string>xnu</string>
<string>IOPCIFamily</string>
</array>
<key>staticlib</key>
<array>
<string>Libcpp_kext</string>
<string>xnu</string>
</array>
</dict>
<key>environment</key>
<dict>
<key>RC_ARCHS</key>
<string>i386</string>
<key>SYSTEM_LIBRARY_DIR</key>
<string>/System/Library</string>
</dict>
<key>version</key>
<string>6.1</string>
</dict>
Development environments
draft.
Status
Most of libraries, headers and developer tools (e.g. a compiler) comes from the Darwinbuild project and/or the MacPorts project.
gcc
gcc -v Using built-in specs. Target: i686-apple-darwin9 Configured with: /Volumes/One/darwin-build-testing/9A581/BuildRoot/private/var/tmp/gcc/gcc-5465.obj/src/configure –disable-checking -enable-werror –prefix=/usr –mandir=/share/man –enable-languages=c,objc,c++,obj-c++ –program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ –with-gxx-include-dir=/include/c++/4.0.0 –with-slibdir=/usr/lib –build=i686-apple-darwin9 –with-arch=apple –with-tune=generic –host=i686-apple-darwin9 –target=i686-apple-darwin9 Thread model: posix gcc version 4.0.1 (Apple Inc. build 5465)
llvm
llvmc –version Low Level Virtual Machine (http://llvm.org/): llvm version 2.5 Optimized build with assertions. Built Jul 30 2009(19:01:55).
llvm (Low Level Virtual Machine) from http://llvm.org/ can be built and installed in a chroot at this time:
[…] llvm[4]: ======= Finished Linking Release Executable Sample (without symbols) make[1]: Nothing to be done for `all’. llvm[0]: ***** Completed Release Build
Disk images
This page describes various formats for disk images used in Darwin, Mac OS X, and Linux. This is a work in progress. Please add to the table.
Note that this page might mention tools that are only available in Mac OS X, but not in PureDarwin.
Hard disk images
.dmg (disk image)
.dmg files can contain either an image of one volume (partition) or of an entire disk (device; including the MBR).
These files are used on the Mac. They can be created by Disk Utility, for example. file reports “VAX COFF executable - version 8122” for compressed images. To mount these on a PureDarwin system, they need to be uncompressed first using the dmg2img utility. Here is an example:
URL="http://macfuse.googlecode.com/files/MacFUSE-2.0.3%2C2.dmg"
DMG="MacFUSE-2.0.3,2.dmg"
MOUNTPOINT=/Volumes/test/
VN=/dev/vn0
set +v # be verbose
set +e # exit on errors
wget -c "${URL}" # download compressed DMG
IMG=$(echo "${DMG}" | sed -e "s|.dmg$|.img|g" ) # get name of IMG
dmg2img "${DMG}" -o "/tmp/${IMG}" -v # uncompress to IMG, http://trac.macports.org/ticket/23489
vndevice attach /dev/vn0 "/tmp/${IMG}" # attach IMG to device
mkdir "${MOUNTPOINT}" # create mount point
mount -t hfs "${VN}" "${MOUNTPOINT}" # mount
find "${MOUNTPOINT}" -iname Archive.pax.gz # do something
# install (to be written)...
umount "${MOUNTPOINT}" && rm -r "${MOUNTPOINT}" # unmount
vndevice detach "${VN}" # detach device
rm "/tmp/${IMG}" # delete IMG
The dmg2img utility can be compiled on a PureDarwin system using MacPorts (see #23489).
.dd/.cdr (raw image)
These files are raw dumps, as the dd program uses them. You can convert .dmg files to these on the Mac, using the following command:
hdiutil convert some.dmg -format UDTO -o some.dd
hdiutil uses the suffix “.cdr” for these files, but in fact the result is a raw dump that can be used with standard, cross-platform tools such as dd. This is why we prefer the “.dd” suffix.
To write a raw dump to a physical disk:
CAUTION: the following commands are dangerous. You might accidentially wipe your hard disk. Do not use this if you do not know what you are doing.
- On the Mac, it can be written with
dd if=some.dd of=/dev/rdiskX bs=2048
- On Linux, it can be written with
dd if=some.dd of=/dev/sdaX bs=2048
.vmdk (Virtual Machine Disk Format)
In this case we use qemu-img.
qemu-img convert -O vmdk PureDarwin.iso PureDarwin.vmdk
CD/DVD images
These are .isos (ISO 9660 CD-ROM filesystem data)
First, you need to populate a temporary directory that contains the boot-132 files and that has cdboot as its El Torito boot image (this allows BIOS-based machines to boot).
ELTORITOISO=/tmp/eltorito.iso
cp cdboot ... /tmp/i386/
cd /tmp/i386
From the temporary directory, run mkisofs:
mkisofs -quiet -V "PureDarwin" -no-emul-boot -boot-load-size 4 -c boot.cat -b cdboot -o "$ELTORITOISO"
In order to retreive the sector count:
sectors=$(du "$ELTORITOISO" | tail -1 | awk '{print $1}')
size_mb=$(du -h "$ELTORITOISO" | tail -1 | awk '{print $1}')
Then create, initialize and mount a HFS+ disk image (dmg)
hdiutil create -fs HFS+J -o "$CDDMG" -size 256M -layout NONE -type UDIF -nospotlight
Partitioning with pdisk + newfs_hfs
(please add text)
The tricky way is to “injects” parts of the temporary El Torito ISO into the dmg using
dd if="$ELTORITOISO" of=$rdev skip=64 seek=64 bs=512
Dump a CD/DVD to an iso image
(please add text)
hdiutil create -srcdevice /dev/disk1s0 -format UDTO some.iso # create the image
mv some.iso.cdr some.iso # manually remove the forced .cdr extension
Hybrid media
Up to four file systems supported: HFS+, ISO-9660, Joliet and/or UDF.
-hfs Generate an HFS+ filesystem -iso Generate an ISO9660 filesystem -joliet Generate Joliet extensions to ISO9660 -udf Generate a UDF filesystem
(Please write some text)
hdiutil makehybrid -o ... ...
Bootable CDs
For bootable CDs, see here.
Mounting DMGs on PureDarwin
It looks like compressed DMGs (UDIF) cannot readily be mounted on PureDarwin since Darwin lacks the neccessary frameworks (e.g., DiskImages.framework) and/or kernel extensions (e.g., IOHDIXController.kext and its plug-ins) that Mac OS X uses for this purpose.
IOHDIXController.kext used to be distributed with Darwin under the Apple Binary License. Perhaps that’s what we need to do for PureDarwin as well.
vndevice
Using the raw BSD vndevice would mean that we cannot seemingly use compressed DMGs (UDIF). Since we want to use a compressed filesystem, it appears that the raw vndevice approach is not an option for PureDarwin.
hdik
Mac OS X comes with a little tool called hdik. Its description reads like it could exactly do what we need in PureDarwin:
hdik is a lightweight tool that can be used to attach disk images in-kernel (i.e. not using a user-land process to providing the backing store). Only a subset of disk images can be mounted in this manner including read/write disk images, UDIF disk images that use zlib compression, shadowed disk images, and sparse disk images.
hdik is intended for use in situations where linking against the DiskIm- ages framework is problematic or an extremely lightweight mechanism for attaching a disk image is needed.
And it looks like it has no “impure” dependencies. However, it apparently calls /usr/libexec/load_hdi which, according to its man page, “is used to load the disk image driver. load_hdi is invoked by the DiskImages framework when it needs to attach images and the user client in IOHDIXController.kext is not available”.
Besides, it looks like the source for hdik is not available. Apparently, hdik is part of the closed-source project DiskImages-195. So it appears that it is not an option for PureDarwin either.
Source code as starting point for own developments
For compressed DMGs (UDIF) see here (sample code in Java) and here (C) Also have a look at this: https://svn.greensocs.com/public/packages/qemu_systemc/qemu-0.9.1/block-dmg.c
Conversion of disk images using LibDMG’s HFS+ implementation
This log should be cleaned up, when I (Tyson) get around to it:
(11:04:38 AM) errordeveloper: hi
(11:05:56 AM) errordeveloper: I just had a bit of experience with getting a dmg image converted into a raw disk image with 1 partion
(11:06:12 AM) errordeveloper: so poweriso and dmg2img didn’t work for me
(11:06:30 AM) errordeveloper: both produced a wrong kind of image
(11:06:46 AM) errordeveloper: which I couldn’t validate with fdisk/parted
(11:06:59 AM) errordeveloper: then I found this:
(11:07:02 AM) errordeveloper: https://github.com/planetbeing/libdmg-hfsplus/>
(11:07:13 AM) errordeveloper: commit d4a253cae40fb4b38377273eb1f89f21c4cb224a
(11:08:13 AM) errordeveloper: ^ current state of the master branch is a bit broken, but all I had to do was just to add one variable which was not defined for some reason
(11:08:53 AM) errordeveloper: after it compiled, I got the ‘dmg’ util to convert the image
(11:09:19 AM) errordeveloper: and the result turned out to be valid in parted
(11:09:29 AM) errordeveloper: now
(11:09:53 AM) errordeveloper: the problem is that http://www.puredarwin.org/developers/diskimages is not a wiki page
(11:10:10 AM) errordeveloper: and I cannot simpy add this info there, so other might find it usefull
DTrace
This page is about the DTrace facility in “Darwin-land”.
What is DTrace?
According to man dtrace:
The dtrace command is a generic front-end to the DTrace facility. The
command implements a simple interface to invoke the D language com-
piler, the ability to retrieve buffered trace data from the DTrace ker-
nel facility, and a set of basic routines to format and print traced
data.
Simply, DTrace is:
- a dynamic debugger and analysis tool (first appeared in Solaris 10 and OpenSolaris, then in Mac OS X 10.5)
- a D programming language interpreter
- a monitoring tool (ie: Observing devices, such as disk or network activity)
- a profiling tool (performance analysis)
- a process, library, user function, (some) kernel function, the operating system (itself) inspector tool
- a bug finder
- scalable
DTrace may also be used as (or be a part of)
- a malware investigation tool
- a process deciphering tool
- a Troubleshooting software bugs
- a partial intrusion detection system
- an educative software (in order to explore, and understand how this operating system works)
Notes: Although PureDarwin is focused on i386, DTrace supports most of common architectures (
-arch i386|x86_64|ppc|ppc64). In Mac OS X 10.5, Instruments.app found in developer tools is another front-end to the DTrace facility. Warning:
Pros
- Every process, or specific processes, can be traced “simultaneously”.
- Output is fully flexible.
- Nanosecond timestamp for function execution measurements.
- Minimum performance impact when used smartly.
- No need to restart anything in order to trace.
- Relatively safe.
Cons
- Partially supported (around 20K probes available instead of 60K) on Darwin (
- DTrace cannot fetch low levels hardware data.
- Performance impact when probe count goes under 36,000 probes (every kernel function entry/return) and 100,000 probes function in user-land. Consequently, not really suited for security auditing, because DTrace may drop events if the system is really busy or simply (but dramatically in this case) abort.
- Need to be run as root (not sure it should belong to “cons” part).
Examples
A real world example: show missing files
On Linux systems, “strace -eopen -f … 2>&1 | grep ENOENT” can be used to see which files a process tries to open. Using dtrace, the equivalent is:
- Open two terminals
- In the first terminal, run: opensnoop -ex
- In the second terminal, run the command that you want to inspect In the first terminal, you will see the files that are tried to be opened but fail to open (e.g., ENOENT).
A cliché example: “Hello world!”
Inline
dtrace -n “BEGIN { trace(“Hello World!”); exit(0);}“ dtrace: description ’BEGIN ’ matched 1 probe CPU ID FUNCTION:NAME 0 1 :BEGIN Hello World!
In a file
Edit and save Hello.d: BEGIN { trace(“Hello World!”); exit(0); } Then run the script: dtrace -s Hello.d
dtrace: script ‘Hello.d’ matched 1 probe CPU ID FUNCTION:NAME 0 1 :BEGIN Hello World!
Detect new process (successfully started)
proc:::exec-success
{
printf("%s(pid=%d) started by uid - %dn",execname, pid, uid);
}
Detect sigkill
proc:::signal-send /args[2] == SIGKILL/ { printf(“to %s”,args[1]->pr_fname); printf(“ at %d“, timestamp); printf(“ by (%d)“, uid); printf(” from %sn“, execname); }
Detect promiscuous mode changes
fbt:mach_kernel:ifnet_set_promiscuous:*
{
printf("%s", execname);
}
Watch setuid/setgid calls
/* '*' == {entry|return} */
fbt:mach_kernel:setuid:*
{
printf("%s", execname);
}
fbt:mach_kernel:setgid:*
{
printf("%s", execname);
}
Classic examples
DTrace one-liners The DTraceToolkit (~100 scripts) D Programming language
It seems to have been based on C language for some parts. (please add text)
- D programs are compiled in user-land
- And sent to the DTrace virtual machine in the kernel-land
- Then run inside the kernel’s address space (not in the DTrace process, nor in the target process)
copyin() Copies len bytes of data from the user-space address uaddr to the kernel-space address kaddr.
copyinstr() Copies a NUL-terminated string, at most len bytes long, from user-space address uaddr to kernel-space address kaddr. The number of bytes actually copied, including the terminating NUL, is returned in *done.
A generic D script example
probe description /predicate/ { action }{style=“font-family:courier new,monospace”}
Probes and providers
A provider is a collection of probe.
Probe syntax
Four fields describe a probe:
provider:module:function:name
Examples:
fbt:mach_kernel:setuid:entry syscall::open*:entry
Notes: Some special characters *, ?, [, and ] are allowed.
* is the well known wildcard extension.
? character is for any single character in the name.
[ and ] characters are used to specify a set of specific characters in the name.
Listing probes
dtrace -l lists all available probes.
ID PROVIDER MODULE FUNCTION NAME
1 dtrace BEGIN
2 dtrace END
3 dtrace ERROR
4 lockstat mach_kernel lck_mtx_lock adaptive-acquire
[...]
22527 plockstat1 libSystem.B.dylib pthread_rwlock_unlock$UNIX2003 rw-release
Available providers
Some providers (non exhaustive list):
Probe name Description fbt Function boundary tracing
io Physical I/O requests/events mach_trap Kernel traps
proc Process functions
profile Sample count activity?
syscall Kernel system calls
vminfo
Default variables
FIXME
** Variable name** Description
arg0…argN Function arguments and return value curpsinfo Structure of current process information errno Error code execname Processname pid Process id probefunc Probe function name probename Probe name tid Thread id timestamp Nanoseconds since boot
Macro variables
FIXME
+--------------------------------------+--------------------------------------+
| <span | <span |
| style="font-weight:bold"> Macro | style="font-weight:bold"> Descripti |
| name | on</span> |
| </span> | |
+--------------------------------------+--------------------------------------+
| $[0-9]+ | macro arguments |
+--------------------------------------+--------------------------------------+
| $egid | effective group id |
+--------------------------------------+--------------------------------------+
| $euid | effective user id |
+--------------------------------------+--------------------------------------+
| $gid | real group id |
+--------------------------------------+--------------------------------------+
| $pid | process id |
+--------------------------------------+--------------------------------------+
| $pgid | process group id |
+--------------------------------------+--------------------------------------+
| $ppid | parent process id |
+--------------------------------------+--------------------------------------+
| $projid | project id |
+--------------------------------------+--------------------------------------+
| $sid | session id |
+--------------------------------------+--------------------------------------+
| $target | target process id |
+--------------------------------------+--------------------------------------+
| $taskid | task id |
+--------------------------------------+--------------------------------------+
| $uid | real user id |
+--------------------------------------+--------------------------------------+
Predicate (optional)
When the predicate evaluates to true, “action” is executed.
** Predicate Name** ** Description**
cpu == 0 true if the probe executes on cpu0 ppid !=0 true if the parent process id is not 0
arg0 == 0 true if first argument is 0 ppid !=0 && arg0 == 0 …
Action (optional)
C-style functions and semicolon (;) separation for the “body”. Examples: printf(), ustack(), trace, …
Kernel destructive actions
Understand “destructive for the running OS”.
“-w” flag required for…
-w permit destructive actions
- void stop()
- voir raise()
- void breakpoint(void)
- void chill(int nanoseconds)
- void panic(void) panic: We are hanging here… It can force a kernel crash dump. FIXME
References
man dtrace man dtruss man procsystime
Jon Haslam. http://wikis.sun.com/display/DTrace/Security, Sun Microsystems, 2008. Glenn Brunette & Jon Haslam. Enhancing Security Awareness with DTrace, Sun Microsystems, 2006. How To Use DTrace. http://www.sun.com/software/solaris/howtoguides/dtracehowto.jsp, Sun Microsystems, 2005. Solaris Dynamic Tracing Guide. http://docs.sun.com/app/docs/doc/817-6223, Sun Microsystems, 2005.
GNUstep
GNUstep is a cross-platform environment that provides partially Cocoa-compatible frameworks. This page is a work in progress and is currently just a placeholder and space for collecting all things related to GNUstep.
About GNUstep
GNUstep is a cross-platform environment loosely compatible with Cocoa. It is available for Linux, for example, and also for PureDarwin (via MacPorts). By the way, WindowMaker and GNUstep are different things and are often confused by people.
Building GNUstep for PureDarwin
Follow the instructions on the MacPorts page (important) and https://trac.macports.org/ticket/14176, https://trac.macports.org/ticket/16425, then do
sudo /opt/local/bin/port archive gnustep +puredarwin
(This is a work in progress.)
Compiling a “Cocoa” hello world on Ubuntu
apt-get install gnustep build-essential libfoundation1.0-dev gnustep-devel gnustep-make libgnustep-base-dev gobjc # maybe too much
source.m
#import <Foundation/Foundation.h>
int
main (void)
{
NSLog (@"Executing");
return 0;
}
GNUmakefile
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = LogTest
LogTest_OBJC_FILES = source.m
include $(GNUSTEP_MAKEFILES)/tool.make
Compile
export GNUSTEP_MAKEFILES=/usr/share/GNUstep/Makefiles # needed?
. /usr/share/GNUstep/Makefiles/GNUstep.sh
make
obj/LogTest # runs
make clean
make
References
- http://wiki.gnustep.org/
- http://www.cocoabuilder.com/archive/message/cocoa/2007/12/10/194725
- http://www.gnustep.it/nicola/Tutorials/WritingMakefiles/WritingMakefiles.html
Graphics
This page describes the graphics infrastructure on both Darwin and Mac OS X.
Sections marked with the “X” logo only apply to Mac OS X and not to Darwin. They are included here to increase the understanding of the differences between PureDarwin and Mac OS X only.
This page is a work in progress, please contribute.
Overview
While Darwin is the operating system underlying Mac OS X, the graphical environments of PureDarwin and Mac OS X are very different. This is because most graphical aspects of Mac OS X (especially Quartz and Aqua) are proprietary, closed-source software and are not available for PureDarwin. Hence, PureDarwin uses a more traditional UNIX-like graphics system (X server), waiting a better alternative.
PureDarwin
What follows is an overview about the various terms and components that make up the graphical infrastructure of PureDarwin.
IOGraphics
The IOGraphics project consists of
- IOGraphicsFamily.kext
- IONDRVSupport.kext (legacy; apparently for very old graphics chips such as ATI Rage series cards from around 1997, Chips and Technologies Asiliant 65550 from around 1997, used in PowerBook 2400/3400)
It is open source.
GraphicsDrivers
GraphicsDrivers is a proprietary, closed-source project that consists (or doesn’t yet include) of the following drivers: ATI
- Radeon: Drivers for a series of ATI R100-based graphics cards from 2001 (ATIRadeon.kext, ATIRadeonDVDDriver.bundle, ATIRadeonGA.plugin, ATIRadeonGLDriver.bundle)
- Radeon 8500:** **Drivers for a series of ATI R200-based graphics cards from 2001 (ATIRadeon8500.kext, ATIRadeon8500DVDDriver.bundle, ATIRadeon8500GA.plugin, ATIRadeon8500GLDriver.bundle, ATIRadeon8500VADriver.bundle)
- Radeon 9700: Drivers for a series of ATI R300-based graphics cards from 2002 (ATIRadeon9700.kext, ATIRadeon9700DVDDriver.bundle, ATIRadeon9700GA.plugin, ATIRadeon9700GLDriver.bundle, ATIRadeon9700VADriver.bundle)
- Radeon X1000 (missing): Drivers for a series of ATI R520-based graphics cards from 2005 (ATIRadeonX1000.kext, ATIRadeonX1000GA.plugin, ATIRadeonX1000GLDriver.bundle, ATIRadeonX1000VADriver.bundle)
- Radeon X2000 (missing): Drivers for a series of ATI R600-based graphics cards from 2006 (ATIRadeonX2000.kext, ATIRadeonX2000GA.plugin, ATIRadeonX2000GLDriver.bundle, ATIRadeonX2000VADriver.bundle) Intel
- AppleIntel830: Drivers for a series of Intel 82830M-based on-board graphics found in 830M, 830MG, and 830MP chipsets from 2003 (AppleIntel830.kext, AppleIntel830GA.plugin, AppleIntel830GLDriver.bundle)
- AppleIntel915: Drivers for a series of Intel 82915G/82910GL-based on-board graphics found in the Intel 915 Express Chipset family from 2004 (AppleIntel915GA.plugin, AppleIntel915GLDriver.bundle)
- ****: Drivers for a series of Intel GMA 950-based on-board graphics from 2005 found in the Mac mini and early MacBook (AppleIntelIntegratedFramebuffer.kext, AppleIntelGMA950.kext, AppleIntelGMA950GA.plugin, AppleIntelGMA950GLDriver.bundle, AppleIntelGMA950VADriver.bundle)
- AppleIntelGMAX3100 (missing): Drivers for a series of Intel GMA X3100-based on-board graphics from 2007 found in the MacBook (AppleIntelGMAX3100.kext, AppleIntelGMAX3100FB.kext, AppleIntelGMAX3100GA.plugin, AppleIntelGMAX3100GLDriver.bundle, AppleIntelGMAX3100VADriver.bundle) Legacy
- AppleAltiVecDVDDriver.bundle (relevant on PPC only)
- AppleNDRV/ATIDriver.bundle
- AppleNDRV/ATIRuntime.bundle NVidia
- GeForce.kext
- GeForce2MXGLDriver.bundle
- GeForce3GLDriver.bundle
- GeForceFXGLDriver.bundle
- GeForceGA.plugin
- NVDANV10Hal.kext: Driver for a series of NV10-based graphics cards from 1999 known as “GeForce 256”
- NVDANV20Hal.kext: Driver for a series of NV20-based graphics cards from 2001 known as “GeForce 3 Series”
- NVDANV30Hal.kext: Driver for a series of NV30-based graphics cards from 2003 known as “GeForce FX Series”/“GeForce 5”
- NVDANV40Hal.kext: Driver for a series of NV40-based graphics cards from 2004 known as “GeForce 6 Series”
- NVDANV50Hal.kext (missing): Driver for a series of G8x-based graphics cards from 2006 known as “GeForce 8 Series”, “8x00” models
- NVDAResman.kext The GraphicsDrivers project is available for use with Darwin under the Apple Driver License. The drivers in Mac OS X 10.5.5 are SourceVersion 53017 (GraphicsDrivers-5.30.17). The MacBook, MacBook Pro Software Update 1.2 contains SourceVersion 53410 (GraphicsDrivers-5.34.10). The version available for Darwin seems to be still 40024.
X server
Like most other UNIX-like operating systems, PureDarwin uses an X server to display on-screen graphics. Please see the XFree86 and X.Org pages for details.
VMware framebuffer
This is a framebuffer kext included in the VMware Tools for Mac.
IOProxyVideoFamily
http://code.google.com/p/ioproxyvideofamily/ need investigation
Mac OS X
What follows is an overview about the various terms and components that make up the graphical infrastructure of Mac OS X.
Quartz
Apple describes Quartz as the “graphics system which forms the foundation of the imaging model for Mac OS X”. The Quatz drawing engine internally uses the PDF format. It can be seen as the successor of the “Display PostScript”-based engine used in NeXTSTEP. Quartz is also responsible for rendering effects like drop shadows in the Mac OS X user interface. Quartz is contained in the closed-source, proprietary** Core Graphics** framework. According to Apple, the terms Quartz and Core Graphics are often used synonymously: “The Quartz 2D API is part of the Core Graphics framework, so you may see Quartz referred to as Core Graphics or, simply, CG”. For more information on Quartz, see the ADC documentation on Quartz. (It is roughly equivalent to what is known as a “window server” and “window manager” on other systems.)
Aqua
The term Aqua is used to describe the visual theme of the Mac OS X user interface. (It is roughly equivalent to what is known as a “skin” on other systems.)
Framebuffer
AppleIntelIntegratedFramebuffer.kext is loaded by default on Mac OS X.
Troubleshooting
AppleIntel830.kext fails to load
AppleIntel830.kext is part of the GraphicsDrivers project. ** ** Problem: 14Intel830Memory is not compatible with its superclass, 8OSObject superclass changed? ** ** Solution: Please let us know if you know the solution.
Halting the system
The command `halt’ is used to shut down the system.
kext_tools needs to be installed for `halt’ to work properly, because `halt’ calls com.apple.KernelExtensionServer and locks `kextd’. So (at the time of 9F33), we patched the kext_tools project for purity purpose, in order to avoid missing symbols expected elsewhere. Surprisedly, now `halt’ and `shutdown’ work perfectly (note: it has yet been tested with CF-lite though, and `kextcache’ depends on):
In case, `halt’ fails, this is what could happening:
WARNING: couldn't lock kext manager for reboot: %s
couldn't lock for reboot
At this time, `shutdown -s now’ is failing because of sleep:
kext_tools and its dependencies are missing in PureDarwin nano releases because they will make PureDarwin nano not “nano” anymore, explaining why halt didn’t work. halt involves IOKitUser, CF, DiskArbitration.framework and Security.framework…
HFS+ partial raw approach
draft.
How did we get there? Needed to replace some blocker as `hdid’ in pd_setup in order to be able to build PureDarwin images not only from Mac but also from PureDarwin.
Each piece is build and then “assembled” on this example:
3: Apple_HFS PureDarwin 305056 @ 2080 (149.0M)
-
The raw target image file itself is created..
dd if=/dev/zero of="$TARGET" bs=512k count=$(expr $SIZE '*' 2)..and attached to a vndevice node (does not behave as a disk device node)/usr/libexec/vndevice attach /dev/vn0 "$TARGET"Then the image/device is initialized and populated with a minimal partition map.pdisk $RDEVICE -initializepdisk $RDEVICE -createPartition "$VOLNAME" Apple_HFS $sectors $(expr $blocks - $sectors) > /dev/null -
The El torito image will host the volume name, the cdboot bootloader and several bootloader files. “$MKISOFS_BIN” -quiet -V “$VOLNAME” -no-emul-boot -boot-load-size 4 -c boot.cat -b $CDBOOT -o “$T_TARGET_P2”
The result is then deployed via to the target image dd if=“$T_TARGET_P2” of=$RDEVICE skip=64 seek=64 bs=512
-
The HFS partition image comes also originally from /dev/zero via
dd'. dd if=/dev/zero of="$T_TARGET_P3" bs=1024k count=600vndevice’ is still involved but on another node. /usr/libexec/vndevice attach /dev/vn3 “$T_TARGET_P3” Construct a fresh HFS+ fs.. newfs_hfs -s -J -v “$VOLNAME” ${RDEVICE} ..and mount it mount -t hfs -o perm ${DEVICE} “$MOUNT”Finally, the HFS image is also deployed to the target image echo “ddying $T_TARGET_P2 to $RDEVICE” dd if=“$T_TARGET_P3” of=$RDEVICE seek=$sectors bs=2048
Notes: detach is not mentioned but should be used.:wq
etc.. fsck !! etc..
State
The HFS partition can be mounted in a running PureDarwin OS. If the cdrom device is attached to the node /dev/disk1: mount -o ro -t hfs /dev/disk1s0s3 /mnt
The “phys_blksz 2048 does not match journal header size 512” error message is not the first symptom of this problem, because after disabling the journalization (removing -J in `newfs_hfs’), the previous error message will not appear but the same kernel panic for same reason(s) will occur.
The `fsck’ tool will complain about bad volume header, as Disk Utility (front-end of fsck for this part).
It boots up to ‘jnl’ in case of a “bootstrap” or a “full” release, and without any problem if it is a “nano” release.
kernel panic if `fsck -fy’ has not been run on this image before as show just below:
Diffing the volume header
Diff a partition built with dd' and vndevice’ against the same one but after `fsck -fy’ on it reveals differences.
This documentation has been really usefull in this process of problem resolution: http://developer.apple.com/mac/library/technotes/tn/tn1150.html
That has also confirmed that the partition is correctly copied via `dd’ into the image, at least the problematic part we focus on.
OK The first 1024 bytes of volume (before the volume header), and the last 512 bytes of the volume (after the alternate volume header) are reserved.
OK The volume header is always located at 1024 bytes from the start of the volume.
NO A copy of the volume header, known as the alternate volume header, is stored starting at 1024 bytes before the end of the volume.
Note: All of the allocation blocks containing the volume header, alternate volume header, or the reserved areas before the volume header or after the alternate volume header, are marked as used in the allocation file. The actual number of allocation blocks marked this way depends on the allocation block size
From top to bottom, the address is growing:
0 reserved (Start of the volume) . … 1023 reserved 1024 Start of the volume header . … n-1024 Start of the alternate volume header (copy of the volume header) . n-512 reserved . … n reserver (End of the volume)
Technically, we inspect this structure in these first 1024+n bytes:
struct HFSPlusVolumeHeader { UInt16 signature; UInt16 version; UInt32 attributes; UInt32 lastMountedVersion; UInt32 journalInfoBlock; UInt32 createDate; UInt32 modifyDate; UInt32 backupDate; UInt32 checkedDate; UInt32 fileCount; UInt32 folderCount; UInt32 blockSize; UInt32 totalBlocks; UInt32 freeBlocks; UInt32 nextAllocation; UInt32 rsrcClumpSize; UInt32 dataClumpSize; HFSCatalogNodeID nextCatalogID; UInt32 writeCount; UInt64 encodingsBitmap; UInt32 finderInfo[8]; HFSPlusForkData allocationFile; HFSPlusForkData extentsFile; HFSPlusForkData catalogFile; HFSPlusForkData attributesFile; HFSPlusForkData startupFile; }; typedef struct HFSPlusVolumeHeader HFSPlusVolumeHeader;
Back to the above diff of the beginning of the Volume header, take in account that not all fields, even if a difference occurs, appeard important “to patch” (e.g.: modifyDate). The main interesting diffs found are:
UInt32 fileCount; 0000 2eec — ( -0x3 ) —> 0000 2ee9 UInt32 folderCount; 0000 052a — ( -0x2 ) —> 0000 0528
UInt32 freeBlocks; 0000 5090 — (+0x1F3) —> 0000 5283
UInt32 nextAllocation; 0001 d839 — (-0x1F1) —> 0001 d648
HFSCatalogNodeID nextCatalogID; 0000 356d — ( -0x7 ) —> 0000 3566
Details
Quick info related to fields where diffs have been found before and after fsck.
attributes
UInt32 attributes;
Volume attributes (set of one bit-flags).
before fsck 8000 2100 binary: 0000 0000 0001 0010 0000 0000 0000 1000 reserv: xxxx xxx x xxxx xxxx xxxx xxxx enable: x kHFSBootVolumeInconsistentBit is set (bit 11). Similar to kHFSVolumeUnmountedBit, but inverted in meaning. Bit should be set when a volume for writing is mounted, and be clear at the end of unmount. If this bit is already set at mount, a consistency checking from the assumption that the volume is corrupt could be needed.
-0x100 after fsck 8000 2000
binary: 1000 0000 0000 0000 0010 0000 0000 0000
reserv: xxxx xxx x xxxx xxxx xxxx xxxx
http://developer.apple.com/mac/library/technotes/tn/tn1150.html#VolumeAttributes
fileCount
UInt32 fileCount;
The total number of files on the volume. The fileCount field does not include the special files. It should equal the number of file records found in the catalog file.
before fsck 0000 2ee9
-3
after fsck 0000 2eec
folderCount
UInt32 folderCount;
Total number of folders on the volume not including the root folder. Should equal number of folder records in the catalog file minus one (the root folder in Catalog)
before fsck 0000 0528
+2
after fsck 0000 052a
freeBlocks
UInt32 freeBlocks;
Contains the total number of unused allocation blocks.
before fsck 0000 5283
+0x1F3 (499)
after fsck 0000 5090
nextAllocation
UInt32 nextAllocation;
Used to find where to start searching for free allocation blocks when allocation space for a file. It contains the allocation block number where the search should start.
before fsck 0001 d648
+0x1F1
after fsck
0001 d839
Can be threated as reserved
http://developer.apple.com/mac/library/technotes/tn/tn1150.html#AllocationFile
nextCatalogID
HFSCatalogNodeID nextCatalogID;
It appears to be an usual UInt32 which points to the next “unused” catalog ID. A catalog ID is a B-Tree.
before fsck 0000 3566
+0x7
after fsck 0000 356d
See Technical Note TN1150: HFS Plus Volume Format for more information.
HFS+
This page describes the HFS+ filesystem and how to interact with it. This is a work in progress; please contribute to this page.
What is HFS+
the HFS+ file system is an improved version of the historical Hierarchical File System (HFS). The predecessor was introduced in Mac OS. The successor is also known as Sequoia, the “new Mac OS Extended Format”. A tree data structure (B*-tree) is used in the HFS+ file system.
How to interact with HFS+
(Please write some text)
Using Mac OS X
Mac OS X can read, write, and boot from HFS+ partitions natively. On the Mac, Disk Utility is the main tool to create and repair HFS+ partitions. (Please write some text)
Using Darwin
Darwin can read, write, and boot from HFS+ partitions natively. On Darwin, hfs_tools is the main tool to create and repair HFS+ partitions. /sbin/fsck_hfs /sbin/fstyp_hfs /sbin/mount_hfs /sbin/newfs_hfs pdisk supports HFS volume names. /usr/sbin/pdisk (Please write some text)
Using Linux
Linux can, with the appropriate driver, read and write HFS+ partitions. However, it lacks tools to create HFS+ partitions.
There is a patch to compile hfs_tools on Linux which overcomes this shortage. (Please write some text)
Using Windows
Windows cannot, per default, read or write HFS+ partitions. However, there are commercial third-party and opensource tools to do so. Opensource: http://hem.bredband.net/catacombae/hfsx.html (Please write some text)
Interprocess Communication (IPC)
Interprocess communication is a “means of information sharing and synchronization” (Singh) between processs. This page describes the various forms of IPC on a Darwin system and also shows forms of IPC not present in Darwin, but in Mac OS X.
Introduction
Processes on a typical Darwin system need to communicate with each other. The Darwin OS provides several mechanisms for such Interprocess Communication (IPC).
Forms of IPC
Since Darwin and Mac OS X are composed from various systems and infrastructures, they provide means for IPC on several different levels of the OS which will be discussed below. For a more detailed overview, read Chapter 9 of Mac OS X Internals by Amit Singh which this page is loosely structured after.
Mach IPC
Mach IPC can approximately be compared with BSD sockets, but is more powerful and is mainly used for local machine communication. Mach IPC is a facility of the XNU kernel; it falls into two distinct categories, ports and messages. The XNU kernel implements most aspects of Mach IPC except network-transparent IPC.
Mach ports: Kernel-provided queues of Mach messages. Tasks can send Mach messages to and receive Mach messages from Mach ports. The kernel blocks sending to full and receiving from empty Mach ports. There is also permission control for Mach ports (“port rights”) so that unauthorized processes cannot randomly access Mach ports. The kernel itself provides Mach ports to interact with resources such as tasks, threads, etc. Hence, one can see the XNU kernel as a server that serves objects through Mach ports.
Mach messages: Can be sent and received by userspace processes through the mach_msg family of functions. Mach messages in Darwin and Mac OS X have the following structure: header, body, and trailer. There are simple and complex Mach messages, where in simple messages the body is untyped and in complex messages the body is structured. Messages can be passive (meaningful only to the sender and the receiver, but not processed by the kernel) or active (interpreted by the kernel).
The Mach IPC implementation of Darwin and Mac OS X resides in the osfmk/ipc/ and osfmk/kern/ipc_ trees of the XNU kernel source. It is an essential part of XNU, since Mach ports play a pivotal role in the creation of Mach tasks and threads.
launchd
Mach Exceptions
Mach Exceptions are interruptions of a program’s normal flow of operation when special conditions arise, such as errors (e.g., trying to divide by zero), when debugging (e.g., breakpoints), when using emulation/virtualization or as part of memory management.
When an exception occurs, Mach sends a Mach message to a special Mach port called an e**xception port, where an exception handler (e.g., a debugger) can pick it up and react to it. Exception ports exist at the host, task and thread levels. There is a special exception handler called the Unix exception handler which translates certain Mach exception messages to Unix signals (see below), thus bridging the Mach and Unix worlds.
Unix Signals
Unix signals are messages that are sent to running processes. Typical signals are SUGHUP, SIGKILL, SIGSEGV and others. Users most commonly use the kill command to send signals to processes. For more information on Unix signals, see Tech FAQ. In Darwin and Mac OS X, Unix signals are implemented on top of Mach Exceptions, derived from FreeBSD’s implementation.
Unnamed pipes
man ftok?
Named pipes (fifos)
man 2 mkfifo
XSI/System V IPC
The X/Open System Interface (XSI) defines a set of IPC interfaces similar to those of System V, especially message queues, semaphores, and shared memory.
POSIX IPC
POSIX IPC is defined in the POSIX Real-time Extensions of the POSIX 1003.1b-1993 standard. They are different from XSI/System V IPC despite similar names.
To be written
notifyd
notifyd is a daemon which provides basic system-wide notification support. Notifications, in the form of simple text labels, can be posted by any application using a basic Mach API. Other processes can register to receive notifications as they occur, either through signals or Mach ports. On OS X, CoreFoundation provides features, through its CFNotificationCenter functions, to post and listen for these notifications. These are missing in CFLite, although the presence of the notifyd means that patching these back in should be relatively simple.
Missing forms of IPC
Distributed Objects
Distributed Objects are a form of Remote Procedure Call (RPC) which originally appeared under NeXT. They are a feature of the Foundation.framework, which is exclusive to Mac OS X. The PureFoundation project is (slowly) bringing its features to Darwin, and hopes to eventually provide a compatible implementation of Distributed Objects.
Notifications
The form of notifications, as marshalled by notification centres, allow both intra- and interprocess communication. On OS X, compatible implementations are provided by both CoreFoundation and Foundation. CFLite lacks these functions. It is likely that a version of these functions will be patched back into CFLite.
Apple Events
Apple Events is an IPC mechanism provided by Mac OS X, but not available on Darwin. Apple Events are mainly used by the AppleScript scripting language to communicate with GUI applications. Although supported by Foundation, the PureFoundation project currently has no plans to implement Apple Events.
Credits
Chapter 9 of Mac OS X Internals by Amit Singh
References
- Wikipedia: Inter-process communication
- Apple: Mach Messaging and Mach Interprocess Communication (IPC)
- Amit Singh: Mac OS X Internals
- Mach Exception Handlers 101
- Tech FAQ: What are Unix signals?
IOKit
Kernel Extensions (KEXTs)
Darwin kernel extensions (KEXT) are modules that provide aditional functionality to the kernel, e.g., in the form of device drivers.
Minimal set of kexts needed
The kernel cannot boot at all (crashes) if there is not at least a certain set of KEXTs present. The minimal set of KEXTs required to boot Darwin 9 from USB appears to be:
- AppleACPIPlatform.kext
- AppleAPIC.kext
- AppleFileSystemDriver.kext
- AppleRTC.kext
- AppleSMBIOS.kext
- IOACPIFamily.kext
- IOATAFamily.kext
- IOHIDFamily.kext
- IOPCIFamily.kext
- IOSCSIArchitectureModelFamily.kext
- IOStorageFamily.kext
- IOUSBFamily.kext
- IOUSBMassStorageClass.kext
- System.kext
This should get the system booting from USB (At the very least, it should go beyond the Got boot device phase, so that no message Still waiting for boot device... appears).
Installing kexts
Copy the KEXT to $VOLUME/System/Library/Extensions/ and fix permissions (important):
chown -R root:wheel $VOLUME/System/Library/Extensions/ chmod -R 755 $VOLUME/System/Library/Extensions/
Determining kext dependencies
The minimal set of KEXTs above cannot, for example, boot from a CD, since the CD driver is not there. Hence, if we want to boot from CD, for example, we need to install the CD driver KEXT and its dependencies. Thus, we need to identify the dependencies.
In order to determine the dependencies of a KEXT, we can use kextlibs. Example:
kextlibs $VOLUME/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext com.apple.kpi.libkern = 9.2.2 com.apple.kpi.iokit = 9.2.2 com.apple.iokit.IOUSBFamily = 3.0.8
So in this example, AppleUSBCDC.kext has three dependencies. To see which KEXT satisfies a dependency (aka dependents), use kextfind:
kextfind -case-insensitive -bundle-id -substring ‘com.apple.iokit.IOUSBFamily’ -print /System/Library/Extensions/IOUSBFamily.kext
Of course, IOUSBFamily.kext itself has its own dependencies, so we need to make that recursive if we want to find out all dependencies.
A visual overview of dependencies
Take a look at Visualize KEXTs dependencies page.
Extensions.mkext
A cache of installed KEXTs is kept in order to speed up boot time.
Unpack Extensions.mkext
Extensions.mkext can be unpacked with the mkextunpack command:
mkextunpack -v -d /tmp/Extensions Extensions.mkext
Force cache update
To force cache update, simply change the modification date of $VOLUME/System/Library/Extensions:
touch $VOLUME/System/Library/Extensions
Types of kexts
Driver KEXTs
(To be written)
Family KEXTs
Family KEXTs are not drivers. Family KEXTs generally contain classes that you are to subclass
Filesystem KEXTs
Filesystem KEXTs are not drivers.
Visualize KEXTs dependencies
In the spirit of Visualize dependencies in MacPorts, this page describes a way to track kernel extension dependencies and related satellite information (e.g: blockers).
Prerequisites
Graphviz is an opensource graph visualization software from AT&T Laboratories and Bell Laboratories (Lucent Technologies).
port install graphviz +the_variants_you_need
or grab and compile the source from graphviz.org. Note: On Mac OS X, Pixelglow is a nice a front-end, you can even see the graph being built in real-time.
Using pd_kextviz to generate a graph
The pd_kextviz tool is available in the svn or hg trunks.
Preliminary
A rudimentary legend is generated in the DOT language:
A KEXT is simply linked to ia bundle identifier (which can be linked to one or many KEXTs).
For clarity purpose, the bundle identifiers are hidden by default.
For purity purpose, each KEXT is examined once in order to find and count potential “current blocker”.
The number of symbols missing (returned by kextlibs) is also displayed on the respective KEXT.
An example across IOBDStorageFamily.kext
The hierarchical view:
This circular view:
The corresponding script output:
./pd_kextviz /System/Library/Extensions/IOBDStorageFamily.kext
Legend:
1 + foo ()
2 |- bar (bundle id) No more dependency 2 |+ baz impure! /Blocker_1 -> file_involved_1 Impurity detected
2 |+ baz impure! /Blocker_. -> file_involved_. Impurity detected 2 |+ baz impure! /Blocker_n -> file_involved_n Impurity detected
2 |+ qux () Dependency found 3 | |. bar (cached: bundle id) Cached bundle identifier
1 . qux Cached kext (Already processed)
Now generating dependencies graphs of kexts, please wait...
1 + /System/Library/Extensions/IOBDStorageFamily.kext ()
2 |- /System/Library/Extensions/System.kext/PlugIns/Mach.kext (com.apple.kpi.mach) 2 |- /System/Library/Extensions/System.kext/PlugIns/Libkern.kext (com.apple.kpi.libkern)
2 |- /System/Library/Extensions/System.kext/PlugIns/IOKit.kext (com.apple.kpi.iokit) 2 |- /System/Library/Extensions/System.kext/PlugIns/BSDKernel.kext (com.apple.kpi.bsd)
2 |+ /System/Library/Extensions/IOStorageFamily.kext (com.apple.iokit.IOStorageFamily) 3 | |- /System/Library/Extensions/System.kext/PlugIns/Unsupported.kext (com.apple.kpi.unsupported)
2 | |. </System/Library/Extensions/System.kext/PlugIns/Mach.kext> (cached: com.apple.kpi.mach) 2 | |. </System/Library/Extensions/System.kext/PlugIns/Libkern.kext> (cached: com.apple.kpi.libkern)
2 | |. </System/Library/Extensions/System.kext/PlugIns/IOKit.kext> (cached: com.apple.kpi.iokit) 2 | |. </System/Library/Extensions/System.kext/PlugIns/BSDKernel.kext> (cached: com.apple.kpi.bsd)
2 |+ /System/Library/Extensions/IODVDStorageFamily.kext (com.apple.iokit.IODVDStorageFamily) 2 | |. </System/Library/Extensions/System.kext/PlugIns/Mach.kext> (cached: com.apple.kpi.mach)
2 | |. </System/Library/Extensions/System.kext/PlugIns/Libkern.kext> (cached: com.apple.kpi.libkern) 2 | |. </System/Library/Extensions/System.kext/PlugIns/IOKit.kext> (cached: com.apple.kpi.iokit)
2 | |. </System/Library/Extensions/System.kext/PlugIns/BSDKernel.kext> (cached: com.apple.kpi.bsd) 2 | |. </System/Library/Extensions/IOStorageFamily.kext> (cached: com.apple.iokit.IOStorageFamily)
3 | |+ /System/Library/Extensions/IOCDStorageFamily.kext (com.apple.iokit.IOCDStorageFamily) 3 | | |. </System/Library/Extensions/System.kext/PlugIns/Mach.kext> (cached: com.apple.kpi.mach)
3 | | |. </System/Library/Extensions/System.kext/PlugIns/Libkern.kext> (cached: com.apple.kpi.libkern) 3 | | |. </System/Library/Extensions/System.kext/PlugIns/IOKit.kext> (cached: com.apple.kpi.iokit)
3 | | |. </System/Library/Extensions/System.kext/PlugIns/BSDKernel.kext> (cached: com.apple.kpi.bsd) 3 | | |. </System/Library/Extensions/IOStorageFamily.kext> (cached: com.apple.iokit.IOStorageFamily)
1 |. </System/Library/Extensions/IOCDStorageFamily.kext> (cached: com.apple.iokit.IOCDStorageFamily)
Generation of IOBDStorageFamily.kext.dot complete.
Now drawing graphs from IOBDStorageFamily.kext.dot, please wait…`
Generation of IOBDStorageFamily.kext_directed.png complete.
Generation of IOBDStorageFamily.kext_circular. png complete.
Generation of IOBDStorageFamily.kext_radial. png complete.
Generation of IOBDStorageFamily.kext_undirected. png complete.
Generation of IOBDStorageFamily.kext_undirectedBIS.png complete.
Detecting blocker inside KEXTs
The example below has been generated on Mac OS X with IOSerialFamily.kext, since we don’t have any blocker on PureDarwin.
The corresponding output:
[...]
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /CoreServices.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/AppleVerizonSupport.kext/Contents/Resources/FixNetworkConfig
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /AppKit.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/InternalModemSupport.kext/Contents/Resources/AppleModemOnHold.app/Contents/MacOS/AppleModemOnHold
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /ApplicationServices.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/InternalModemSupport.kext/Contents/Resources/AppleModemOnHold.app/Contents/MacOS/AppleModemOnHold
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /Cocoa.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/InternalModemSupport.kext/Contents/Resources/AppleModemOnHold.app/Contents/MacOS/AppleModemOnHold
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /CoreServices.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/InternalModemSupport.kext/Contents/Resources/AppleModemOnHold.app/Contents/MacOS/AppleModemOnHold
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /Foundation.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/InternalModemSupport.kext/Contents/Resources/AppleModemOnHold.app/Contents/MacOS/AppleModemOnHold
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /CoreServices.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/InternalUSBModem.kext/Contents/Resources/modemd
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /CoreServices.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/MotorolaSM56K.kext/Contents/Resources/MDCPd
1 + /System/Library/Extensions/IOSerialFamily.kext impure! /CoreServices.framework -> /System/Library/Extensions/IOSerialFamily.kext/Contents/PlugIns/MotorolaSM56KUSB.kext/Contents/Resources/MDCPdUSB
1 + /System/Library/Extensions/IOSerialFamily.kext ()
[…]
Generation of IOSerialFamily.kext.dot complete.
Massive generation
We generate the whole dependencies tree with:
./pd_kextviz find /System/Library/Extensions/ -name ‘*.kext’``
At this time, it looks like:
The circular overview is usefull (but often too big) to isolate node with a number of links lower than 2:
Miscellaneous
The Mac OS X whole graph:
Ressources
http://www.graphviz.org The Kernel Extensions (KEXTs) page
Live CD
Live CDs are a very popular way to distribute operating systems.
How Live CDs work
In order to make a PureDarwin Live CD, we essentially need to do two things:
- Hardware detection. Linux Live CDs configure themselves to use the correct drivers. While this is a major breaktrough for Linux distributions, Darwin has been working like this all the time. What this means for PureDarwin is that we essentially have to ensure that we ship a broad range of kexts, and the system does the rest “for free”.
- Compressed main filesystem. Linux Live CDs contain, besides the kernel, an initrd (a small filesystem) which loads the necessary drivers (roughly comparable to Extensions.mkext), mounts a 700 MB compressed filesystem (roughly comparable to a .dmg) that contains around 2GB of compressed software, switches over (“chroot”) to that filesystem, and continues to boot from there. For PureDarwin, we can probably achieve this by using NetBoot disk images locally.
- Union filesystem. Because the main compressed filesystem is read-only, write accesses must be redirected to an overlay/union filesystem. Most Linux Live CDs use unionfs/aufs for this purpose. Darwin can use shadow volumes for the same purpose. A PureDarwin Live CD would attach a shadow volume that is stored in a local ramdisk to the root disk image. Mac OS X does this using the nbdst tool.
If anyone knows more about how to use NetBoot images locally, please join work on the Live CD.
How Mac OS X Installation DVDs work
Mac OS X Installation DVDs are capable of running Mac OS X from a read-only medium. Maybe we can learn from that, hence we are looking at the procedure in this paragraph.
As of Snow Leopard, Mac OS X Installation DVDs contain the launchd LaunchDaemon plist file /System/Library/LaunchDaemons/com.apple.install.cd.plist with the following content:
<?xml version="1.0" encoding="UTF-8">
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.install.cd</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/etc/rc.install</string>
</array>
</dict>
</plist>
Hence, when the system is booted, the script /etc/rc.install is executed. This script mainly launches the Installer. However, there is also a script /etc/rc.cdrom which does the main magic of mounting ramdisks to.
#!/bin/sh
# (...)
#
# Disable prebinding-on-the-fly while we're CD booted
#
export DYLD_NO_FIX_PREBINDING=1
#
# mount root_device to update vnode information
#
mount -u -o ro /
# (...)
#
# Create a RAM disk with same perms as mountpoint
#
RAMDisk()
{
mntpt=$1
rdsize=$2
echo "Creating RAM Disk for $mntpt"
dev=`hdik -drivekey system-image=yes -nomount ram://$rdsize`
if [ $? -eq 0 ] ; then
newfs_hfs $dev
# save & restore fs permissions covered by the mount
eval `/usr/bin/stat -s $mntpt`
mount -t hfs -o union -o nobrowse $dev $mntpt
chown $st_uid:$st_gid $mntpt
chmod $st_mode $mntpt
fi
}
**RAMDisk /Volumes 1024**
**RAMDisk /var/tmp 1024**
**RAMDisk /var/run 1024**
**
**
**RAMDisk /var/db 1024**
mkdir -m 1777 /var/db/mds
# language prefs, colorsync need to be able to write some preferences (5424449)
**RAMDisk** **** **/Library/Preferences 1024**
**RAMDisk /Library/ColorSync/Profiles/Displays 2048**
# use or create the boot cache playlist, and allow B&I to force 32-bit playlist generation
FORCETHIRTYTWO="false"
if nvram boot-args | grep "no64exec" ; then
FORCETHIRTYTWO="true"
fi
SIXTYFOURBIT=`sysctl -n hw.cpu64bit_capable`
if [ $SIXTYFOURBIT = "0" -o $FORCETHIRTYTWO = "true" ] ; then
echo "using 32-bit bootcache playlist"
BootCacheControl -f /var/db/BootCache.playlist32 start
elif [ $SIXTYFOURBIT = "1" ] ; then
echo "using 64-bit bootcache playlist"
BootCacheControl -f /var/db/BootCache.playlist start
fi
# tell launchd to commence with loading the system.
# for the OS Install environment only, /etc/rc.install is included in this process.
launchctl load -D system
# this script sleeps forever; the installer or startup disk will always reboot the system.
sleep 9999999
How does this script get called? **How can hdik be replaced with what is in Darwin? **Please let us know. Perhaps we could use a MacFUSE based ramdisk from http://thebends.googlecode.com/svn/trunk/ramdisk/
So far, when replacing the above RAMDisk function with one based on MacFUSE’s mount_ramdisk, we get launchctl error: launch_msg(): Socket is not connected Please let us know if you know how to solve this.
How a PureDarwin Live CD might work
Alternative 1: Uncompressed from disc
Run the system uncompressed from the CD medium (like PureDarwin nano or like the Mac OS X Install DVD).
This is not a workable option for two reasons: It’s slow (since more data needs to be read from the slow optical disc) and it’s too small (700 MB is not much space).
Alternative 2: Using imageboot
The XNU kernel contains some references to “imageboot”, e.g., here: http://fxr.watson.org/fxr/source/bsd/kern/imageboot.c?v=xnu-1228
Apparently, one should be able to boot using a boot argument like -v rp=file:///some.dmg then the system would mount /some.dmg as the root device and continue booting from there.
How this works is largely undocumented. Below is a proof-of-concept for imagebooting PureDarwin nano on a Mac host.
What follows are proof-of-concept instructions that show how to boot into puredarwin.iso (from the PureDarwin nano image on the download page) that is located at / on a Mac running Mac OS X 10.5.4. Please do not try this on a production machine. Only try this if you have a spare Mac. Download PureDarwin nano, it contains puredarwin.iso which we will use as the imageboot image On the Mac running Mac OS X (tested with 10.5.4), copy puredarwin.iso to / Change IOHDIXController.kext and its plug-ins so that they are loaded at boot time (normally, this is only the case for NetBoot):
cd /System/Library/Extensions/IOHDIXController.kext/
find . -type f | xargs perl -i -p -e 'print STDERR "changed $val values on line $. of $ARGVn" if($val = s@Network-Root@Root@g)'
touch /System/Library/Extensions
Edit /Library/Preferences/SystemConfiguration/com.apple.Boot.plist so that it contains:
<key>Kernel Flags</key>
<string>-v r p=file:///puredarwin.iso</string>
Reboot the Mac. It should now boot into PureDarwin, running from puredarwin.iso
You have now performed an ImageBoot of PureDarwin nano on a Mac OS X host.
To undo, remove the extra Kernel Flags from your Boot.plist.
There are (unverified) news reports that cite “ImageBoot” as an official feature in the not-yet-released Snow Leopard: http://www.macnn.com/articles/08/10/20/more.snow.leopard.changes
However, all attempts to make this work on a Darwin host so far resulted in
According to Singh, the kernel can be forced to use the BSD vndevice instead of hdix by specifying vndevice=1 as a boot argument. In this case, the function netboot_setup() from netboot.c is supposed to mount the file system contained in the vndevice node. But we can’t get it to work yet (and it would only work for uncompressed images).
Please let us know if you know if you are aware of a working solution that does not involve IOHDIXController.kext, or where a recent version of IOHDIXController.kext can be downloaded under a suitable license. (It used to be available under the Apple Binary License, but it made its last appearance in Darwin 6…)
As a totally desperate worst-case fallback scenario: The source code for mounting filesystem images is available, and there is source code for uncompressing compressed DMGs available. Maybe it would be feasible to write a minimal IOHDIXController.kext replacement that is able to mount compressed DMGs. Volunteers?
A set of NetBoot files created by System Image Utility looks like this:
./i386
./i386/booter
./i386/mach.macosx
./i386/mach.macosx.mkext
./NBImageInfo.plist
./NetBoot.dmg
./ppc
./ppc/booter
./ppc/mach.macosx
./ppc/mach.macosx.mkext
$ file NetBoot.dmg
NetBoot.dmg: Apple Partition data block size: 2048, first type: Apple_partition_map, name: Apple, number of blocks: 63, second type: Apple_Driver43, name: Macintosh, number of blocks: 56, third type: Apple_Free, name: , number of blocks: 0, fourth type: Apple_Driver_ATAPI, name: Macintosh, number of blocks: 56
$ file i386/booter
i386/booter: Universal EFI binary with 2 architectures, i386, x86_64
(to be continued)
Alternative 3: Using a ZFS file
Maybe using a compressed ZFS file and manual trickery…
Shadow files
This is a work in progress.
#!/bin/bash -e -x
mount -uw
touch /shadowfile
/usr/libexec/vndevice attach /dev/vn0 /uncompressed.dmg
/usr/libexec/vndevice shadow /dev/vn0 /shadowfile
mount -t hfs /dev/vn0 /live/
# /usr/libexec/vndevice detach /dev/vn0
References
- System Image Utility.app (part of Server Admin Tools for Mac OS X) can create NetBoot images; probably the same can be achieved with lower-level command line tools
- /etc/rc.netboot (mailing list entry)
- BootMania, a software that supposedly can boot Darwin (8) with NetBoot
- Server Admin Tools 10.5, contains System Image Utility which is used in Mac OS X to make NetBoot images
login
Since multi-user support is available, managing logins (so that users run with only the permissions they have been granted) follows naturally.
Console login
Console login can be achieved using the ``getty’` tool. There is a launchd plist (com.apple.getty.plist) available (but uninstalled by default - we need to add this to the next revision of Spring) as part of the system_cmds project. Installing this leads to a login prompt being displayed (as long as the startx script isn’t also run).
(The prompt gets swamped by error messages, but we’re working to eliminate them.)
Also note that getty' takes care of creating user security sessions, so the *pam_sessioncreate.so* hack is no longer needed and can be removed from /etc/pam.d/login`. It even creates the SECURITYSESSIONID environment variable, which is very nice.
SSH login
SSH login is working if an sshd server is of course running. A security session is automatically created, but the SECURITYSESSIONID environment variable is not set (which is the same behaviour as on OS X).
X login
Authorised X login is not currently supported, but should be easy enough to implement. The org.puredarwin.x.plist should invoke an “Xlogin” app instead of the default window manager, as it currently does. Since X and PAM are standards on Linux/BSD, finding the source code to such an app should not be a problem. One which doesn’t rely on any particular widget set would be preferred. The source will then need to be (very slightly) modified to include the necessary security session creation code. This won’t be very hard.
So if someone can recommend a simple X login app which we can modify, let us know. (xdm is a basic one (and there is also gdm and kdm (probably more dependencies)))) (we could also provide a X CLI one tunneled in a SSH session: ssh user@::1 -X (or -Y..) + the command which launchs X (pros: ssh authentication is reliable, the session is encrypted, ::1 force to use IPv6 sockets to localhost | con: too slow in QEMU probably))
X Display manager list
To investigate:
xdm slim enter (not maintained since last update: March 26, 2007) orthos (unsecure?) Entrance (from e17) wdm (not maitained) __ __ Ready to provide (+default choice (e.g., in bold)): ..
Smartcard login
Need to investigate: http://smartcardservices.macosforge.org/
Disable login
Disabling possibility of login on the system is also part of the management. (Remove getty and login stuff, remote_cmds, sshd, etc..) (via dscl) (removing shells) Automatically create the /etc/nologin file.
Auto login
Should we “enable” this kind of dangerous feature (it is technically possible), is it really needed?
MacFUSE
MacFUSE is a filesystem in userland. It runs well on PureDarwin and can be used to mount sshfs, ramdisk and other FUSE-based filesystems. It is, according to its maintainers, “The Easiest and Fastest Way to Create File Systems for Mac OS X” (and PureDarwin, one might add).
Installing MacFUSE
MacFUSE can be installed from the official MacFUSE.pkg (from the MacFUSE site) on PureDarwin with the following commands:
cd / ; gunzip -c “MacFUSE.pkg/Contents/Resources/10.5/MacFUSE Core.pkg/Contents/Archive.pax.gz” | pax -r chown -R root:wheel /Library/Filesystems/fusefs.fs/Support/fusefs.kext chmod -R 755 /Library/Filesystems/fusefs.fs/Support/fusefs.kext
Now MacFUSE is ready to use on PureDarwin.
sshfs
sshfs allows you to mount volumes over SSH.
Install the sshfs filesystem with curl “http://macfuse.googlecode.com/svn/trunk/filesystems/sshfs/binary/sshfs-static-leopard” > /usr/sbin/mount_sshfs chmod a+x /usr/sbin/mount_sshfs
Now we can mount a remote filesystem with mkdir /Volumes/SSHVolume/ mount_sshfs user@some.host:/ /Volumes/SSHVolume/ -oauto_cache,reconnect,volname=SSHVolume
ramdisk
Status: functional in PureDarwin (Darwin 9)
ramdisk is, as its name implies, a ramdisk implemented in MacFUSE. Install it with
svn co http://thebends.googlecode.com/svn/trunk/ramdisk/ ramdisk cd ramdisk/ make cp ramdisk /usr/sbin/mount_ramdisk cd - rm -rf ramdisk/
Now we can use the ramdisk command to create ramdisks:
mkdir /some/path mount_ramdisk /some/path
Troubleshooting in building ramdisk and targetting Darwin 9
In case you plan to build it on Darwin 10, a couple of adjustements must be made. Edit the Makefile and replace this line in order to be able to run it on Darwin 9:
CC = g++
by this line CC = MACOSX_DEPLOYMENT_TARGET=10.5 g++
And this line
OPTS = -D_FILE_OFFSET_BITS=64 -D__FreeBSD__=10 -DFUSE_USE_VERSION=26 by this line OPTS = -D_FILE_OFFSET_BITS=64 -D__FreeBSD__=10 -DFUSE_USE_VERSION=26 -arch i386
Problem: If you encounter:
file.cpp: In constructor ‘ramdisk::File::File(ramdisk::Dir*, mode_t)’: file.cpp:17: error: ‘assert’ was not declared in this scope cc1plus: warnings being treated as errors or encounter
dir.cpp: In function ‘void ramdisk::assertNoSubdirs(const std::string&)’: dir.cpp:11: error: ‘assert’ was not declared in this scope […] dir.cpp:228: error: ‘assert’ was not declared in this scope **Solution: **Simply add #include <assert.h> in file.h per example.
Problem: cc1plus: warnings being treated as errors file.cpp: In member function ‘virtual size_t ramdisk::File::Read(char*, size_t, off_t)’: file.cpp:26: warning: comparison between signed and unsigned integer expressions Solution: Replace in file.cpp this line
if (offset < len) {
by this line
if ((size_t) offset < len) {
Then after a make clean' and make’, everything should be fine and run on a PureDarwin release based on Darwin9:
MACOSX_DEPLOYMENT_TARGET=10.5 g++ -Wall -Werror -g -D_FILE_OFFSET_BITS=64 -D__FreeBSD__=10 -DFUSE_USE_VERSION=26 -c node.cpp MACOSX_DEPLOYMENT_TARGET=10.5 g++ -Wall -Werror -g -D_FILE_OFFSET_BITS=64 -D__FreeBSD__=10 -DFUSE_USE_VERSION=26 -c file.cpp MACOSX_DEPLOYMENT_TARGET=10.5 g++ -Wall -Werror -g -D_FILE_OFFSET_BITS=64 -D__FreeBSD__=10 -DFUSE_USE_VERSION=26 -c dir.cpp MACOSX_DEPLOYMENT_TARGET=10.5 g++ -Wall -Werror -g -D_FILE_OFFSET_BITS=64 -D__FreeBSD__=10 -DFUSE_USE_VERSION=26 -c ramdisk.cpp ar rcs libcommon.a node.o file.o dir.o ramdisk.o MACOSX_DEPLOYMENT_TARGET=10.5 g++ -D_FILE_OFFSET_BITS=64 -D__FreeBSD__=10 -DFUSE_USE_VERSION=26 -o ramdisk main.cpp -L. -lcommon -lfuse
To be continued
NetBSD and the experimental Darwin binary compatibility
This is a work in progress, attempting to run some mach-o binaries on NetBSD (macppc in this case).
Appeared as a significant change in NetBSD 3.0.
Kernel stuff
/netbsd
Building the kernel with darwin support
Assuming you have set a default proper environment for compiling your kernel: In the /usr/src/sys/arch/YOUR_ARCH/conf/YOUR_CONFIG
At least, you have to enable these options:
options COMPAT_DARWIN # Darwin binary compatibility (experimental)
options COMPAT_MACH # Mach compatibility, needed for COMPAT_DARWIN
options EXEC_MACHO # Mach-O binary support, needed for COMPAT_MACH
Optionnaly, uncomment the following:
#options DEBUG_DARWIN # COMPAT_DARWIN debugging
#options DEBUG_MACH # COMPAT_MACH debugging
After editing your configuration file, you can begin to build the kernel:
config YOUR_CONFIG cd ../compile/YOUR_CONFIG make depend make cp /netbsd /netbsd.old cp netbsd /netbsd
Then reboot..
Assembler messages:
Error: bad expression
Error: syntax error; found 4' but expected ,’
Error: junk at end of line: `4,0’
Error: bad expression
sysctl interface
By default:
sysctl -a | grep darwin
emul.darwin.init.pid = 0
emul.darwin.ioframebuffer.unit = 0
emul.darwin.ioframebuffer.screen = 0
emul.darwin.iohidsystem.mux = 0
In the source code of darwin_sysctl.c, we can read:
/*
* On Darwin, mach_init is the system bootstrap process. It is responsible
* for forking the traditional UNIX init(8) and it does the Mach port naming
* service. We need mach_init for the naming service, but unfortunately, it
* will only act as such if its PID is 1. We use a sysctl
* (emul.darwin.init.pid) to fool a given process into thinking its PID is 1.
* That way we can run mach_init when we want to.
* Typical use:
* sysctl -w emul.darwin.init.pid=$$; exec /emul/darwin/sbin/mach_init
*
* The same problem exists after mach_init has forked init: the fork libc stub
* really insist on the child to have PID 2 (if PID is not 2, then the stub
* will issue bootstrap calls to an already running mach_init, which fails,
* of course).
*/
darwin_lib
“These libraries are part of the Darwin compatibility option for
NetBSD/powerpc and NetBSD/i386.
*
*
The kernel options EXEC_MACHO', COMPAT_MACH’ and `COMPAT_DARWIN’
must be in your kernel config file for this to work.“ from /usr/pkgsrc/emulators/darwin_lib/DESCR
cd /usr/pkgsrc/emulators/darwin_lib/
make install clean
If the build fails, you will probably need to edit /usr/pkgsrc/emulators/darwin_lib/Makefile and remove the problematic (XFree86) missing rpm in DISTFILES variable. Attempt to run a mach-o binary
No mach_init is present by default, and mach_init has been dropped…
sysctl -w emul.darwin.init.pid=$$ && exec /emul/darwin/sbin/mach_init
At the root of a mounted old darwin iso (ppc), populate the darwin userland shadow root:
scp -r bin sbin usr <NetBSD macppc host>:/emul/darwin
scp -r System/Library <NetBSD macppc host>:/emul/darwin/System
The process in `ps aux’:
USER PID %CPU %MEM VSZ RSS TTY STAT STARTED TIME COMMAND
root 412 0.0 0.0 0 0 ttyE0 RW+ - 0:00.00 /emul/darwin/sbin/mach_init
FAIL!
cd /emul/darwin
./usr/bin/uname -a
same state..
root 421 0.0 0.0 0 0 ttyp0 RW+ - 0:00.00 ./usr/bin/uname -a
FAIL!
At this time,
Note: It seems memory is not allocated, an the RW+ status seems curious.
Please, let us know if you have a solution.
Ressources
http://netbsd.gw.com/cgi-bin/man-cgi/man?compat_darwin+8+NetBSD-current http://www.netbsd.org/docs/compat.html#ports http://hcpnet.free.fr/applebsd.html
Network
This page primarily details how to get networking working in PureDarwinXmas, but these steps should be applicable to any Darwin installation. Next releases should/could include some part present here.
Network support
A must.
Install Network Drivers
Network drivers are provided in the form of Kernel Extensions (KEXTs). While Apple has made a few available in either source or binary form, these are nowhere near as many as are provided with OS X. In particular, although the AppleIntel8254XEthernet.kext which is needed for VMWare exists, it is not available for redistribution in any form.
For the Intel d945gclf2 Atom board, Realtek’s AppleRTL8169Ethernet is reported to work. Realtek have a good selection of drivers available on their website.
VMWare settings
The first thing you will need to do is edit the virtual machines configuration file. This is the .vmx file inside the virtual machine’s bundle. Ensure that the following options are present.
ethernet0.present = “TRUE”
ethernet0.virtualDev = “e1000”
ethernet0.wakeOnPcktRcv = "FALSE"
ethernet0.linkStatePropagation.enable = "FALSE"
/System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/.
But since this isn’t available (blocker) for general distribution you’re pretty much stuck.
Blocker: no kext available which will match the e1000 device in VMware
QEMU settings
Through the QEMU user mode network stack, it is possible to have a weird but functional network (rtl8139 tested). For more information, refer to the QEMU page. A quick overview:
- DHCP client (KernelEventMonitor) and server (QEMU virtual DHCP server) functionality.
- Guest IP address starts from 10.0.2.15.
- DHCP server and gateway on 10.0.2.2.
- A virtual DNS server is also (10.0.2.3) present and autoset.
- A virtual SAMBA or NFS can be used on 10.0.2.4 (not tested) in order to access files on the host via file sharing.
- A workaround is involved in order to avoid the connection to stall.
Install PureFoundation
The PureFoundation.root.tar.gz available from the PureDarwin svn or the PureDarwin hg repository contains two system frameworks which are required by a number of different networking components. Also available from the same location is the ddistonoted.root.tar.gz. Install both of these. Install SystemConfiguration.framework and Components SystemConfiguration.framework, which is part of the configd project, provides the components needed to configure network interfaces. Unfortunately, it does not currently build correctly and the available binary roots (spread across configd.root and configd_executables.root) are incomplete. You’ve probably already guessed that the missing components are the ones we need. However, by loading configd into XCode it is possible to build some of the individual components needed.
The file configd.root.tar.gz below contains as many of the missing components as we could get to build and a template preferences.plist. Install it in the usual manner (using ditto) and you will have all the components needed to get networking up and running.
Install and fix these files with:
sudo ditto ~/Downloads/configd.root/ /Volumes/PureDarwinXmas/
sudo chown root:wheel /Volumes/PureDarwinXmas/System/Library/LaunchDaemons/com.apple.configd.plist
Activate DirectoryServices
You must copy the com.apple.DirectoryService* plists into /System/Library/LaunchDaemons and set their ownership to root:wheel.
This is all very well, but how do we get networking to configure itself automatically?
- The IPMonitor bundle contains no compiled code and is responsible for allowing the DirectoryService daemon to perform DNS lookups.
Getting a version of this bundle which will work in PureDarwin will now be one of our highest priorities. So we’re currently waiting for a non-linked version of bootp. Credits
Thanks to Dr. Rolf “RolfHeinrich” Jansen for providing the missing components and the knowledge to use them. Availability and investigation
Watch carefully from many points of view (e.g., legal, technical, etc..).
Available
http://src.macosforge.org/Roots/9A581/AppleIntel8255x.root.tar.gz (available in DarwinBuild consequently) (reported to work in QEMU)
Realtek’s AppleRTL8169Ethernet Intel d945gclf2 Atom board (e.g., reported to work)
AppleRTL8139Ethernet.kext is available in Darwinbuild. Realtek RTL8139 Ethernet card“ (e.g., reported to work in QEMU)
Investigate
RealtekR1000 It’s an opensource driver for network controllers RTL8168, RTL8111, RTL8169, RTL8101 and some others modification for Mac OSX. It is based on Realtek’ driver for Linux and doesn’t supported by Realtek. http://sourceforge.net/projects/realtekr1000/ 82566mm svn checkout http://82566mm-osx-driver.googlecode.com/svn/trunk/ 82566mm-osx-driver-read-only http://techresearchinfo.blogspot.com/
intel-e1000e-kext Open source kernel extension for Intel E1000e series of network cards (supporting many models) http://code.google.com/p/intel-e1000e-kext/
iwidarwin Intel® PROSet/Wireless 2200-2915/2100/3945/4965 driver for Mac OS X http://code.google.com/p/iwidarwin
osxbge A port of the BSD bge driver to Apple’s OS X operating system. Broadcom 57xx and 59xx network chipsets http://code.google.com/p/osxbge/
wirelessdriver
http://sourceforge.net/projects/wirelessdriver/
Blocked
AppleIntel8254XEthernet.kext is not redistributable. Intel e1000 network card (e.g., the one supported in VMware Fusion)
otool
otool is a tool that, among other things, can show which shared libraries an application needs to run (similar to “ldd” on Linux).
When to use otool
otool is useful when you want to run an application on PureDarwin, but are not sure what libraries it needs.
How to use otool
Assume we want to know which libraries are needed to run bash. Simply run:
otool -L /Volumes/PureDarwin/bin/bash
It will give us
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
So, we need to have these libaries installed in our PureDarwin system in order to be able to run bash.
Use chroot
In order to further test, you can use chroot. (To be described)
Package management
Historically, Darwin did not have package management. However, DarwinBuild has many elements already in place to make one. This page is for discussion what needs to be there, what is already there, and what hence needs to be done. This page is currently in brainstorming mode. Please join the discussion!
What needs to be there
- Find out the version of a (installed/uninstalled) binary root (“package”)
- Install a binary root, including its run-time dependencies
- Uninstall a binary root
- Check whether a given binary root is needed by any other binary roots that are currently installed
- Find out which files belong to a given binary root
- Find out which binary root a given file belongs to
- Upgrade a binary root (taking into consideration its dependencies)
- Prevent different binary roots from overwriting each other’s files
- Repair permissions
- Download binary roots from repositories (like apt-get or yum)
- Get package descriptions into the metadata
What is already there
- The xref database, which is populated at build time, and which includes information about versions and build- and run-time dependencies (but no versions thereof? However, DarwinBuild is monolithic in the sense that every 9C31 project depends on other 9C31 projects ONLY)
- A mechanism to package binary roots into archives (tar.gz, xar)
- Darwin manifests, which contain information about which installed file belongs to which installed binary root, checksums, and permissions
- darwinup, the Darwin Update utility, which according to its description, “provides a transaction-based mechanism to install software on the base system that modifies or supersedes existing system components. Darwin Update is not a “package manager,” and does not specify any package format. Updates can be installed from a directory, a tar archive, or other formats.“
darwinup
darwinup looks like a useful tool, and it appears to be under currently development (check the timeline on the Darwinbuild MacOSForge page). It is provided as part of the darwinbuild source code, and is built and installed along with the other darwinbuild tools. We would recommend that you then install it in /usr/sbin on your Darwin installation. darwinup will provide the final leg of the installation/deinstallation process: installing packages from the local disk and tracking which files are affected by each operation. darwinbuild requires that the bzip2 package is installed. This is not currently provided by PureDarwinXmas, and there is no binary root available for it, but it seems to build without problems. darwinup can install from a .tar, .tar.gz, .tar.bz or even .pkg. (It can also install a directory, in the style of uncompressed binary roots).
The final line is the UUID under which the package was installed. The UUIDs of all installed packages can be shown using the list command, and can be used to un-install packages: 5DAF8472-468B-409B-A037-E8A7DD0F6E4E These UUIDs are a very good example of why a user-friendly package management system is needed.
What needs to be done
- The metadata contained in the xref database must go into the binary root packages (initial progress)
- An installer must be written which interprets this metadata and stores it in the target machine’s xref database, and that makes use of darwinup
- An uninstaller must be written which interprets the metadata from the xref db and the darwin receipts and/or darwinup. [It is possible that darwinup keeps a “reference count” for all packages, only removing them when all packages needing them are gone. This will have to be looked into. If it is correct, this simplifies this part of uninstallation: we can tell darwinup to remove a package and all of its dependencies, and darwinup can then decide what needs to actually be deleted.]
- A higher-level tool must be written which resolves run-time dependencies and downloads the appropriate binary root packages from the repositories (although current DarwinBuild is designed as “monolithic”, i.e. “the OS” = 1 unit)
“Glue” language to use: python?
- Available on Darwin, Mac OS X, and (almost) anywhere alse
- Can talk to sqlite3 (xref) easily
- Can parse plists with python-plist
- Can use tgz, tbz2 files with tarfile and xar files with pyxar
- Needs no compilation, supports rapid prototyping and changing
- Easy to learn and understand
Questions
- darwinxref exportProject -xml nano seems not to include versions of the dependencies (this apparently comes from the fact that the DarwinBuild database was conceived as monolithic and “completely filled” once an OS release is made.) The key information here is that packages from one build version always depend on packages of the same build version (e.g., 9C31) ONLY.
- Integrate ? Integrate rpm which MacPorts apparently uses? Integrate dpkg which Fink uses?
Mac OS X
Let’s, for a minute, look at how Mac OS X does things. It comes with an utility called pkgutil which comes closest to a package manager (but at the same time lacks important functionality): sh-3.2# pkgutil –file-info $(which pkgutil) volume: / path: usr/sbin/pkgutil pkgid: com.apple.pkg.BaseSystem pkg-version: 10.5.0.1.1.1192168948 install-time: 1193314189 uid: 0 gid: 0 mode: 100555 pkgid: com.apple.pkg.update.os.10.5.1 pkg-version: 1.0.1.1191932192 install-time: 1195808274 uid: 0 gid: 0 mode: 100555 pkgid: com.apple.pkg.update.os.10.5.3.combo pkg-version: 1.0.1.1191932192 install-time: 1212138511 uid: 0 gid: 0 mode: 100555 Its man page states that “Package dependency analysis and reference counting are not yet available, hence there is no –uninstall command yet”. See the installer-dev mailing list for more information.
Security
RPM depends/relies on gnupg backend in order to check integrity. The default keyring can be spoofed with a bad keyring which can lead to validate compromised binary if somebody change the $GPGPATH variable or the macro $_gpg_path. Also md5sum can be hooked too, take care.
Parallels Desktop
draft Tested trial version: 4.0.3844
Status
.iso can be boot as cdrom but faces the read-only medium problem. qemu-img convert test.vmwarevm/test.iso (or vmdk) test.hdd results in a non bootable disk.
Screenshots
Platform Expert
The Platform Expert is a vital part of the Darwin kernel environment. It contains the hardware abstraction layer, that is hardware specific parts of the kernel space. The Platform Expert for Intel machines is contained in AppleACPIPlatform.kext, which is available under the Apple Binary Driver License.
What the Platform Expert does
You can basically think of the Platform Expert as a “driver for the logic board”. As such, it can roughly be compared to the Hardware Abstraction Layer (HAL) of other operating systems. The Platform Expert initializes the data structures that the I/O Kit needs. Specifically, it creates the root node of the device tree in the I/O Registry, which all other nodes attach to. As such, it is a fundamental part of the Darwin kernel environment. The Platform Expert also handles kernel flags (such as cpus=1), registers interrupt, scans the system for devices, and drives the text console. In the XNU source code, the Platform Expert is referred to as pexpert.
Known issues with AppleACPIPlatformExpert
AppleACPIPlatform.kext, which is available for use with Darwin under the Apple Binary Driver License in binary-only form, has been written specifically with Intel-based Macs in mind. Apparently little to no testing has been done to ensure that it is compatible with other hardware. Over time, the AppleACPIPlatformExpert has become more and more strict about some hardware features it assumes to be present. For example, ACPI tables, such as DSDTs, are assumed to follow Apple’s standards. If the machine does not follow Apple’s standards in the ACPI tables, this can create undesired effects. For example, it results in some multi-core machines crashing whenever xnu is loaded without the cpus=1 kernel flag. It might also result in unforeseen behavior in the area of power management.
Other Platform Experts
Various PowerPC Platform Experts are available. For the i386 architecture, only two Platform Experts are of interest: AppleACPIPlatformExpert (mentioned above) and AppleI386GenericPlatform, which is Open Source but only available and working up to Darwin 8. If one wanted to use it with Darwin 9, one would have to modify it.
Specify which Platform Expert to use
The platform=ACPI kernel flag tells the kernel to load the Platform Expert which matches “ACPI”, if available. This is AppleACPIPlatform.kext, since its Info.plist looks like this:
<key>IONameMatch</key>
<string>ACPI</string>
See [[Generic platform kext for PureDarwin]] for alternative non-ACPI solution for Darwin 10.
Projects
This pages contains notes about individual projects that can be built with DarwinBuild like build issues, necessary patches, and solutions.
PS2 Controller
Draft.
Voodoo PS2 Controller
VoodooPS2Controller 0.98 has been released and seems to work. All KEXTs below are loaded at boot:
- VoodooPS2Controller (tested in tty)
- VoodooPS2Keyboard (tested in tty)
- VoodooPS2Mouse
- VoodooPS2Trackpad
kextstat reports: 23 2 0xb007000 0x6000 0x5000 org.voodoo.driver.PS2Controller (1.1.0) <12> 26 0 0xb10d000 0x3000 0x2000 org.voodoo.driver.PS2Keyboard (1.1.0) <23 22 12> 51 0 0xd25f000 0x8000 0x7000 org.voodoo.driver.PS2Trackpad (1.1.0) <23 22 12>
Notes: The KEXTs above are conflicting with ACPIPS2Nub from D. Elliott (e.g., needed for ApplePS2Controller) so be sure choose one or the other solution exclusively. ACPIPS2Nub will be autoloaded, but not necessarly ApplePS2Controller KEXTs.
kextload /System/Library/Extensions/ApplePS2Controller.kext/Contents/PlugIns/ApplePS2Keyboard.kext
kextload /System/Library/Extensions/ApplePS2Controller.kext/Contents/PlugIns/ApplePS2Mouse.kext
kextload /System/Library/Extensions/ApplePS2Controller.kext/Contents/PlugIns/ApplePS2Trackpad.kext
PureDarwin bootstrap
draft.
TODO: ramdisk (compressed) really begins to lack.
launchd' via [/System/Library/LaunchDaemons/org.puredarwin.installer.plist](http://code.google.com/p/puredarwin/source/browse/projects/PureDarwinSettings/System/Library/LaunchDaemons/org.puredarwin.installer.plist) launches pd_installer’ (probably in /usr/local/share/puredarwin/scripts).
Generating a “bootstrap” release
PUREDARWIN_RELEASE=“bootstrap” ./pd_setup ../../vm/bootstrap.vmwarevm PureDarwin
pd_installer
Example on VMware … Host OS: MacOS X running VMware fusion Guest OS running inside VMware: PureDarwin “bootstrap”
Short count-down for the BIOS stage, where IDE devices are reported:
- A cd device (bootstrap.iso)
- An hd device (2 GB, non formated)
The screen can sometimes been entirely filled by the error below:
EBIOS read error: Error 0x31
Block 0 Sectors 4
This is not really problematic and should lead to the next screen.
The bootloader does not come from the media (bootstrap.iso) but from VMware (as displayed version shows).
See the VMware page for more information.
If [F8] is pressed, additional boot arguments can be passed to the kernel.
A Kernel EXTens decompression might occur.
Notice the cd-rom icon blinking while reading.
etc..
disk device detection (iofindwholemedia)
PureDarwin release
[x]
Boot on cd, deploy to hd (no ramdisk).
cd to hd
PureDarwin Core
PureDarwin Core is a collection of packages which seeks to provide a Darwin system with networking and the features which make Darwin differ from other OSes (eg. the main security and configuration daemons). PureDarwin Core will be the first set of packages installed on a system, and will run the second stage of the installation process.
A possible package list would be (in no particular order):
Official Darwin packages
- files
- xnu
- configd
- configd_executables
- launchd
- bash
- bsm
- CoreOSMakefiles
- dyld
- gnuzip
- gnutar
- bzip2
- Libsystem
- Libm
- libgcc
- libiconv
- securityd
- ICU
- ncurses
- Security
- syslog
- system_config
- objc4
- autozone
- zlib
- BootCache
- efiboot
- system_cmds
- Libc
- Libcpp_kext (not sure about this)
- notify
- DiskArbitration
- bootstrap_cmds
- libutil
- adv_cmds
- diskdev_cmds
- file_cmds
- network_cmds
- hfs
- DirectoryService
- DirectoryServiceDaemon
- bootp
- libresolv
- passwordserver_sasl
- OpenSSL
- SQLite
PureDarwin additions
These can be found in the Roots directory of the PureDarwin Google Code svn/hg.
- PureDarwinSettings
- PureDarwinInstall
- voodoo_kernel
- NotApple80211
- libstdcxx_libs (not libstdcxx, which is approx. 196Mb on its own)
- PureFoundation
- CFNetwork
- ddistnoted
- PCSC
- dm
- lua
- curl
- libedit
KEXTs and related
- IOKitUser
- kext_tools
- Apple3Com3C90x
- AppleIntel8255x
- AppleRTL8139Ethernet
- AppleAPIC
- AppleFileSystemDriver
- AppleIntelPIIXATA
- AppleSMBIOS
- AppleUSBCDCDriver
- IOACPIFamily
- IOATAFamily
- IOATAPIProtocolTransport
- IOCDStorageFamily
- IODVDStorageFamily
- IOHIDFamily
- IOPCIFamily
- IOStorageFamily
- IOUSBFamily
- IOUSBMassStorageClass
- AppleACPIPlatform
- AppleRTC
- IOATABlockStorage
- IOBDStorageFamily
- IOSCSIArchitectureModelFamily
- IONetworkingFamily
- ApplePS2Controller
- ACPIPS2Nub This little lot comes to just over 200Mb on disk, and will shrink to 67Mb as a gnu-zipped tarball.
PureDarwin Repository
Note: This document is a draft
The PureDarwin project uses a Mercurial (and used a Subversion) repository (hosted on Google Code) to maintain sources, patches, other code and binary roots that are or that are not part of one of our favorite upstream projects.
This page describes how to use the contents of the repository to build your own PureDarwin ISOs and virtual machines.
Please contact us if you need write access. Everyone who wants to make Darwin more usable is invited.
Basic structure
The current Mercurial repository is composed of the sub repositories.
- default The default full release, hosts the setup scripts and settings in order to build a fully PureDarwin release in various form. It also contains setup scripts and settings in order to make an Installer (called bootstrap) or a minimalist PureDarwin release (a.k.a. nano) where only one process will run, a shell. http://code.google.com/p/puredarwin/source/browse/
- Roots This repository is dedicated to the hosting of binaryroots (not all of them) from DarwinBuild, MacPorts and PureDarwin. It is also used by the default and the nano release. Few sources and files have been mirrored inside it too. http://code.google.com/p/puredarwin/source/browse/?repo=roots The latest revision of the repository can be browsed at http://puredarwin.googlecode.com/.
Usage
Requirements
The actual state still needs
-
A Mac to create various PureDarwin images. However, deploying PureDarwin can be done from PureDarwin (“bootstrap”).
-
Mercurial in order to clone, commit, archive and push fixes, modifications and enhancements to the project. We have compiled and packaged Mercurial with (hopefully) all its dependencies, you can download it here, this package installs it to /opt/local/bin/hg. Alternatively, you may build it from MacPorts.
-
A local copy of the remote PureDarwin repository obtained via
hg clone https://puredarwin.googlecode.com/hg/ puredarwinSee “Source checkout” for more information on Google Code. If you get “abort: could not import module architecture!” then you could try the package linked above.
Optionally,
- The DarwinBuild project (in order to deploy your own binaryroots)
- The MacPorts project
- Xcode (which is a requirement via transitivity)
Quick steps
After cloning of the PureDarwin repository, the quickest way is to modify nothing and keep the default configuration (pd_config). Simply fetch binaryroots, thin them and build/deploy PureDarwin to the requested target after selection the `setup’ folder.
./pd_fetch./pd_thin./pd_setup(a usage should display potential choices) Important: Be aware that a full (non-nano) PureDarwin system currently cannot be run from a read-only disk such as a CD-ROM, DVD, or an ISO file. It needs a r/w hard disk (real hardware) or virtual disk. This might be solved once we go the Live CD way.
!
Configuration
In case you decided to edit pd_config to reflect your needs, keep in mind only few variables need to be edited in the most cases.
All options are not fully yet described here. Please see also the comments inside pd_config.
DARWIN_RELEASE
Simply target the Operating System major release version, a.k.a Darwin 9 or Darwin 10.
DARWIN_RELEASE="9"orDARWIN_RELEASE="10"
This variable is used by
- pd_config
- pd_fetch
- pd_thin
- pd_setup
ARCH
Target the architecture.
ARCH="i386"At this time, only “i386” is supported, but we’re convinced that minor efforts (e.g., adapting bootloader steps to different OpenFirmware, adding some needed projects specific/related to the PPC support in “pd_roots”, etc…) should be involved in order to bring PPC support in Darwin 9. Idem for “X86_64”.
Feel free to help us in this quest too.
This variable is used by
- pd_config
- pd_thin
- pd_setup
PUREDARWIN_RELEASE
This variable enables a profiling of the release. Depending the value, specific options are enabled or disabled.
Note: Most of the time, the choice should be “synced” with the BINARYROOTS_LIST_FILE variable.
It is possible to override the value of PUREDARWIN_RELEASE via exporting it in the environment, prior to the script execution. See this example.
PUREDARWIN_RELEASE=""orPUREDARWIN_RELEASE="bootstrap"orPUREDARWIN_RELEASE="nano"This variable is used by
- pd_setup
BINARYROOTS_LIST_FILE
This variable references a file containing the list of binaryroot project names.
By default, the BINARYROOTS_LIST_FILE variable is automatically set to the corresponding PUREDARWIN_RELEASE.
Note: Most of the time, the choice should be “synced” with the PUREDARWIN_RELEASE variable.
BINARYROOTS_LIST_FILE="pd_roots"orBINARYROOTS_LIST_FILE="pd_roots.bootstrap"orBINARYROOTS_LIST_FILE="pd_roots.nano"
A trivial set theory is visible: “pd_roots.nano∈ pd_roots.bootstrap ∈ pd_roots”
The binaryroots in pd_roots.nano also belong to pd_roots.bootstrap and pd_roots sets.
The binaryroots in pd_roots.bootstrap also belong to pd_roots.
This variable is used by:
- pd_fetch
- pd_thin
- pd_setup
DARWINBUILD_DIR
Binaryroots built locally via DarwinBuild can be used (prior to the one fetched remotely on MacOS Forge in case it has not already been fetched) if DARWINBUILD_DIR variable is correctly filled in pd_config. However that can also result in one or more conflict between all the dependents and the dependencies living in the system (e.g., missing symbols) if you tend to mix binaryroots built in different BuildRoots.
#
# Dir of darwinbuild build directories
#
# WARNING: The binaryroots built on your local computer can,
# depending on the constellation of your buildroot resulting
# in problematic relation between dependents and dependencies.
#
# First Roots/.DownloadCache/ is checked then Packages/ if nothing found
#DARWINBUILD_DIR="/[...]/darwinbuild"
This variable should points to a directory containing build directories (e.g., 9J61, 9L30, 10C540, etc…).
This variable is used by
- pd_fetch
- pd_thin Notes: DarwinBuild may access the PureDarwin repository automatically (and/or remotely) if you initialize it with a Puredarwin plist.
ADD_CLONE
..
“Genetic” constraints
Basic overview
Which kind of PureDarwin you will be able to generate from the PureDarwin you generated is conditioned by the couple of (PUREDARWIN_RELEASE/BINARYROOTS_LIST_FILE) and ADD_CLONE.
The picture above shows that nothing can be generated from PureDarwin nano.
PureDarwin and PureDarwin bootstrap are able to generate themselves and respectively the other ones.
Note: Implicitly, that’s not (yet) entirely true concerning PureDarwin boostrap.
PureDarwin will contains the same packages (c.f. pd_roots) which have been used to make it in /usr/local/share/puredarwin/…
PureDarwin bootstrap will contains the same packages (c.f. pd_roots.bootstrap) which have been used to make it. Because “pd_roots.nano ∈ pd_roots.bootstrap ∈ `pd_roots”, PureDarwin bootstrap will be only able to generate itself or a PureDarwin nano.
Zooming chickens and eggs
This is a more detailed and realistic, where there is (by default) no alteration of the couple of (PUREDARWIN_RELEASE/BINARYROOTS_LIST_FILE) and ADD_CLONE.
Where obviously everything can be generated from a Mac (green dotted arrow), it’s “almost” the contrary a fortiori depending the flavor of PureDarwin.
The black arrow represents a successful deployment.
A blue dotted arrow shows that the deployment could be successful if the expected binaryroots are present.
A red one faces a blocker.
Resources
The full chaotic history is available on request.
PureDarwin Google Code repository
PureFoundation
This page is about the use of PureFoundation on Darwin. For details about its development, see the links section below.
About PureFoundation
PureFoundation is a binary-compatible, open source clone of Apple’s Foundation framework, designed exclusively for Darwin. It uses the same components as Apple’s Foundation: the Objective-C 2.0 Runtime, CoreFoundation, and (one day) the AutoZone garbage collector. PureFoundation’s primary goal is to allow certain dependant parts of Darwin run correctly. Objective-C is a great programming language, and Foundation provides a feature-rich and mature development environment, so it’s hardly surprising that Apple chose it to write a number of key components of Darwin. However, since Foundation has not been released, this has left us in the position where these components simply will not run. While Apple’s open source team usually do an excellent job of fixing such dependencies, in these cases the only fix would be to re-write the component in question using a different set of libraries, which is an impractical amount to ask. Instructions for getting and installing PureFoundation can be found here: http://code.google.com/p/purefoundation/wiki/InstallingPureFoundation. Status
v0.003 (15/03/2009) Latest test target, dscl, seems to run correctly.
How to recognise a dependency on Foundation
At compile time, in the darwinbuild chroot, dependencies appear as missing header files (eg. “Foundation.h”) or linker errors (eg. “unable to link to Foundation.framework”). At run time, dependencies are signalled by linker errors like:
dyld: Library not loaded: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation Referenced from: /System/Library/PrivateFrameworks/OpenDirectory.framework/Versions/A/OpenDirectory or alternatively with a message like ``. Typically, if the symbol begins “NS”, it is a problem which PureFoundation should be able to solve. See Current Blockers for a list of some of the components affected.
Report a dependent on Foundation
If (when) you encounter a tool or application which looks like it needs Foundation, please report it via the PureFoundation issue tracker at http://code.google.com/p/purefoundation/issues/list. Links
PureFoundation is now hosted on Google Code, at http://code.google.com/p/purefoundation/. Resources
http://www.hereapi.com/pf/index.html http://www.puredarwin.org/news/purefoundation
http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/ObjC_classic/FoundationObjC.pdf
Another similar project apparently was Objective-C Substrate
In the beginning… “One step at a time is a good walking” dixit a chinese proverb.
v0.0007 All classes which can be directly bridged to CFLite (strings, arrays, dictionaries, sets, calendars, timezones, etc.) are present and at least 90% complete. It can now run dscl (which complains that the server isn’t running and exits, but at least it doesn’t crash).
v0.0006 This version should now run ‘arch’ correctly. It also no longer causes the X server to break.
v0.0005
We should think to change “our case study” from now.
arch
i386
Exactly the expected behavior!
arch -p
arch: Unknown architecture: p
``
v0.0004
Our case study:
arch
i386
And
arch -p
EXCEPTION!!!!
`` name: NSInvalidArgumentException
``reason: Attempting mutable dictionary op on a static NSDictionary
Note: This version, we have placed Foundation.framework and replaced CoreFoundation.framework plus libobjc.A.dylib in the BuildRoot.
FoundationTool
2009-02-06 13:12:48.468 FoundationTool[12163:10b] CFLog: Hello, World!
-- back from CFLog --
Note: For your information, `FoundationTool’ is “the Cocoa command line tool you get by selecting “Foundation Tool” from the “Command Line Utility” section of XCode’s “New Project…” window. I’ve compiled it here for your convenience. All it does is create an NSAutoreleasePool, write “Hello World!” using NSLog, then drains the pool. BUT this was compiled on OS X and will run on Darwin, proving that we’ve taken our first step towards a binary-compatible Foundation.framework.“ quoting the Readme.
v0.0003
arch i386
arch -p zsh: bus error arch -p
N____otes: Although the version 0.0003 “relies on a patched CFLite, which in turn relies upon PureFoundation” (dixit), it appears to work (at least for `arch’) with the default CFLite for some binary.
v0.0002
arch
+[NSObject load]
_cfisa before = 6186080
+[NSObject initialize]
+[NSObject class]
Continuing with +initialize -- means this is NSObject
address of self (NSObject Class) is 193376
Created retain dictionary.
+[NSString initialize]
+[NSString initialize]
+[NSCFString initialize]
+[NSObject class]
Setting _PFNSCFStringClass
_PFNSCFStringClass = 193504
+[NSCFString alloc]
_PFNSCFStringClass = 193504
_cfisa after = 6186080
i386
arch -p
+[NSObject load]
_cfisa before = 6186080
+[NSObject initialize]
+[NSObject class]
Continuing with +initialize -- means this is NSObject
address of self (NSObject Class) is 193376
Created retain dictionary.
+[NSString initialize]
+[NSString initialize]
+[NSCFString initialize]
+[NSObject class]
Setting _PFNSCFStringClass
_PFNSCFStringClass = 193504
+[NSCFString alloc]
_PFNSCFStringClass = 193504
_cfisa after = 6186080
+[NSObject initialize]
+[NSObject class]
+[NSObject alloc]
NSAllocateObject
value of aClass is 193696
object var points to 10489024
-[NSAutoreleasePool init]
-[NSObject init]
+[NSAutoreleasePool __hello:]
+[NSObject initialize]
+[NSObject class]
+[NSObject initialize]
+[NSObject class]
+[NSString stringWithUTF8String:]
+[NSString stringWithCString:encoding:]
_PFBlessNSCFString
_PFBless old _cfisa = 0
zsh: bus error arch -p
``
v0.0001
Q - [kju:]
Some QEMU attempts through Q, A CPU emulator for Macintosh.
Status
As of January 2010, Q.app still uses qemu 0.9.x, whereas PureDarwin needs 0.10 to function properly. Hence, we recommend to use QEMU instead for now.
The latest version (Q-0.9.1d118) has been updated last year, creating a big gap between the latest official QEMU and the one used in Q front-end. Consequently, Q is not usable for PureDarwin at this time.
We also tried to replace i386-softmmu with a newer version inside Q.app but no success since the usage is different between both parts (and also the features supported). UI
Q control manager
Configuration
Boot sequence
DFE bootloader
CPU:FSB multiplier detection fails
**Please, let us know if you have a solution. **
Chameleon bootloader
SMBIOS well-known problem is bypassed with Voodoo kernel (xnu-dev).
Then, the real boot begins, but quickly ends with a problem related to APIC similar to the one in VirtualBox page.
Then, with <string>-f -v -x cpus=1 busratio=16 io=0x21</string> in /Library/Preferences/SystemConfiguration/com.apple.Boot.plist, things go far:
Ressources
http://www.kju-app.org/ (Q) http://bellard.org/qemu/ (QEMU) http://code.google.com/p/xnu-dev (Voodoo, A fork of the XNU kernel)
QEMU
This page is about running PureDarwin on the QEMU emulator and is *not *about running Mac OS X.
QEMU is a hardware emulator that can be used to run operating systems on virtualized hardware, not unlike VMware or Parallels. It is an open source project. The ability to run PureDarwin on emulated hardware can be very useful, especially for development, testing and debugging. If you get the “Error parsing plist file”, then you need to increase the amount of virtual RAM. At least 330 MB seem to be required. If the kernel just crashes and the boot prompt appears again, press F8 and enter.
Running PureDarwin Xmas on QEMU
On Linux hosts
To get PureDarwin Xmas to run in QEMU, fetch QEMU from svn, compile, run without kqemu (it might work on OSX-supported cpus). Update: if you can get a 0.10 binary of qemu for your platform (some are linked below), you don’t necessarily need to compile from svn any more. Update 2: As of Ubuntu 9.10, the QEMU that can be installed with sudo apt-get install qemu is sufficient, so you don’t need to compile or download a special version of QEMU any more. Use the following configuration:
or
-hda puredarwinxmas.vmdk -cdrom purdarwinxmas.vmdk -boot d -m 512
or
-hda puredarwinxmas.vmdk -cdrom purdarwinxmas.iso -boot d -m 512
QEMU can (at least on some platforms) emulate the Realtek RTL8139 network interface. An open source driver for this NIC is included with PureDarwinXmas. Enable the interface in QEMU with the -net nic,model=rtl8139 -no-kvm-irqchip -net user option.
Run it using the instructions above (although -hda puredarwinxmas.vmdk -cdrom puredarwinxmas.vmdk -boot d -m 512 seems the more reliable option).
X will probably fail to start first time, but can then be kicked into life with startx or pd_startx.
PureDarwin Xmas running on openSUSE. Credits: oxygene
PureDarwin Xmas on Ubuntu 8.10 (using the binary linked below) and mach_kernel.voodoo.
Command used:
qemu -hda 'puredarwinxmas.vmdk' -cdrom 'puredarwinxmas.vmdk' -boot d -m 512
press F8 when asked
mach_kernel.voodoo
On Windows hosts
PureDarwin Xmas on MS Windows XP (using the binary linked above). Credits: oxygene
On Mac OS X hosts
QEMU 0.10.1 from MacPorts can run PureDarwin Xmas with
qemu -hda puredarwinxmas.vmdk -cdrom puredarwinxmas.vmdk -boot d -m 512
Note: if you want to run qemu from a different location, use the -L option as:
qemu -L ./pc-bios/ -hda puredarwinxmas.vmdk -cdrom puredarwinxmas.vmdk -boot d -m 512
If you don’t boot by default with the Voodoo kernel (xnu-dev), at boot press F8…
And enter
mach_kernel.voodoo rd=disk1s3 -v
or, if you have the vmdk as -hda:
mach_kernel.voodoo rd=disk0s3 -v
Wait for a bit on failed to open/create the journal… if that happens.
At the end of the KEXTs decompression phase, the CPU FSB clock and ration should be adjusted by the voodoo kernel.
After the KEXTs decompression phase, you should see the kernel booting (notice the network adapter supported).
Then depending your settings, a login prompt or X should be waiting for you.
It is necessary to launch X11 manually by issuing /usr/X11R6/bin/startx.
QEMU 0.10.1 from MacPorts running PureDarwin on Mac OS X 10.5. QEMU devices
Here is a list of potential devices found in a QEMU guest OS.
“0x1013”,“0x00B8”,“Cirrus Logic”,“CL-GD5446”,“64-bit VisualMedia Accelerator” “0x8086”,“0x7000”,“Intel Corporation”,“82371SB”,“PIIX3 PCI-to-ISA Bridge (Triton II)” “0x8086”,“0x7113”,“Intel Corporation”,“82371AB/EB/MB”,“PIIX4/4E/4M Power Management Controller” “0x1af4”,“0x1002”,“”,“” “0x10EC”,“0x8139”,“Realtek Semiconductor”,“RTL-8139/8139C/8139C”,“Realtek RTL8139 Family PCI Fast Ethernet NIC” “0x8086”,“0x7010”,“Intel Corporation”,“82371SB”,“PIIX3 IDE Interface (Triton II)” “0x8086”,“0x1237”,“Intel Corporation”,“82440LX/EX”,“PCI & Memory”
QEMU network
The dawn of networking support in PureDarwin finally appears with QEMU.
QEMU vlan network capability is entangled with the “user mode network stack”. This network stack supports ip, tcp, udp, dhcp, tftp, etc.. but ICMP. It also acts as a proxy between the qemu process and the target process, with tcp/udp data field decapsulation and forward.
The user network stack
Credits: Partial network support already existed, thanks to “hingwah” who helped and pointed its existence to us.
As said in 3.7.3 Using the user mode network stack QEMU documentation (“The DHCP server assign addresses to the hosts starting from 10.0.2.15.”), the interface is well auto-assigned (notes: KernelEventMonitor (confid_plugins) has been added and seems to be responsible of the client DHCP capability) as the route to the virtual available gateway (a firewall / dhcp server).
Requirements
Append -net user if it is not already there to the qemu command line: […] -net nic,model={i82551|i82557b|rtl8139} -no-kvm-irqchip -net user […]
Be prepare to ping the gateway continuously, it’s a workaround.
As user inp reported on #puredarwin, adding ‘-no-kvm-irqchip’ to the qemu call solves this issue with the rtl8139 driver.
Of course, it’s mandatory to have a Kernel EXTension matching its respective device.
E.g. below with the realtek kext matching its respective virtual RTL8139 device in QEMU:
DHCP (IPv4)
An example of a “correct” configuration, where everything has been provided automatically (KernelEventMonitor) via DHCP.
What expected:
10.0.2.2 should respond to ping (gateway firewall/dhcpd). 10.0.2.2 should be the default route. 10.0.2.3 should answer to DNS query. 10.0.2.4 should answer to SMB (if available). 10.0.2.15 is where starts the first guest ip address.
What is well known:
It seems that network hangs easily if the gateway is not pinged when network operations are needed. As user inp reported on #puredarwin, adding ‘-no-kvm-irqchip’ to the qemu call solves this issue with the rtl8139 driver.
Ping workaround
ping the gateway (10.0.2.2) from the guest side (PureDarwin) seems necessary at this time.
If it is not the done, the connection simply hangs or fails to establish sometimes.
As user inp reported on #puredarwin, adding ‘-no-kvm-irqchip’ to the qemu call solves this issue with the rtl8139 driver.
Depending the ping interval (-i) against the virtual gateway, the bandwith varies (a pseudo bandwith control state; qos?). Below is an example across the time, where the interval took the no value, then 0.9, 0.5, 0.1 and 0 (This example was done downloading nmap).
Miscellaneous
Guest fingerprint (10.0.2.15)
The famous Fyodor `nmap’ basic fingerprint result against 10.0.2.15 (guest: en0) looks like (X running without –no-listen tcp as shown).
Gateway fingerprint (10.0.2.2)
Interesting to see what looks like from nmap point of view the virtual gateway (user mode network stack):
DNS server fingerprint (10.0.2.3)
..
QEMU options
This is another non exhaustive list of (reported to work) options available. Some part also needs investigations and feedback.
Standard options
-M machine select emulated machine (-M ? for list) Need investigations. (could be interesting to see how it is close or not the reality when it is possible to compare the cases)
-cpu cpu select CPU (-cpu ? for list) Need investigations.
-fda/-fdb file use 'file' as floppy disk 0/1 image No thanks.
-hda/-hdb file use 'file' as IDE hard disk 0/1 image Reported to work with a iso, dmg, vmdk (convert or not).
-hdc/-hdd file use 'file' as IDE hard disk 2/3 image Need investigations.
-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master) Reported to work with a iso, dmg, vmdk (convert or not).
``
-smp n set the number of CPUs to 'n' [default=1] ****
-k language use keyboard layout (for example "fr" for French) Need investigations, not working.
-vga [std|cirrus|vmware] ****
-usb enable the USB driver (will be the default soon) Need investigations.
-usbdevice name add the host or guest USB device 'name' Need investigations.
-name string set the name of the guest PureDarwin.
-uuid %08x-%04x-%04x-%04x-%012x specify machine Need investigations, UUID C0FFEEC0-FFEE-C0FF-EEC0-FFEEC0FFEEC0 has no effect.
Network options
According to the `man’, “The NIC is an ne2k_pci by default on the PC target”, but some other valid values are: i82551, i82557b, i82559er, ne2k_pci, ne2k_isa, pcnet, rtl8139, e1000, smc91c111, lance and mcf_fec.
-net nic[,vlan=n][,macaddr=addr][,model=type]
create a new Network Interface Card and connect it to VLAN ‘n’-net nic,model=rtl8139 is enabled by PureFoundation. Need investigations.
-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)** “d” with the corresponding target is functional.**
-redir to test. Need investigations -tftp prefix -smb -macaddr addr -nics
** ** The option “-net nic,model={i82551|i82557b}” seems to match with AppletIntel8255x from DarwinBuild:
Live options
Press ctrl+alt+2 to switch to QEMU monitor:
Press ctrl+alt+3 to switch to serial0 console:
Press ctrl+alt+4 to switch to parallel0 console:
Patches to run stock XNU on QEMU
Currently, it appears that one needs to used a patched version of the XNU kernel called mach_kernel.voodoo to run on QEMU. This is even true when running QEMU on an Intel Mac on Mac OS X (tested with a MacBook Pro).
Alexander Graf has sent patches to the QEMU mailing list that allow Darwin to run on QEMU natively. Specifically, these patches
- Add HPET
- Add a dummy LPC device on which the HPET is located
- Identify CPU as Core Duo by setting family 13, adding a MSR and a CPUID instruction
- Add partial ICH6 IDE controller emulation
- Add support for multiboot (such as a modified boot-132 boot loader)
- Add ACPI entries to Bochs They also add some other functionality that is not relevant for running Darwin.
It seems that the necessary patches have made their way into QEMU 0.10, as this version doesn’t need special patching any more.
probono’s networking experiments 12/2011
The experiments are done with a “fuller” PureDarwin installation than Xmas or Nano. Above it says “everything has been provided automatically (KernelEventMonitor) via DHCP”, however it doesn’t do that for me (I must be missing something still). Hence I set up networking by hand, which is a bit cumbersome:
The following are my tests on Ubuntu 12/2011; probono
# qemu: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"
# can be solved with
sudo apt-get install kvm-pxe
# Launch qemu as root and with -redir tcp:22::22 for SSH access
sudo qemu -hda /dev/sdc -net nic,model=rtl8139 -no-kvm-irqchip -net user -redir tcp:22::22
# Inside qemu
ifconfig en2 10.0.2.15 up
ping 10.0.2.2 # works (which is the gateway provided by qemu)
# Create /etc/rc.local with the following content to
# bring en2 up automatically at boot time
#!/bin/bash
ifconfig en2 10.0.2.15 up
sudo route add 0.0.0.0 10.0.2.2
# Headless SSH server inside qemu
sudo qemu -hda /dev/sdc -net nic,model=rtl8139 -no-kvm-irqchip -net user -redir tcp:22::22 -vnc :1 -redir tcp:80::80
# Works :-)
# The only thing that does not work yet is DNS
# scutil --dns # resolver #1 is empty, which is a problem -- very ugly workaround:
echo 'nameserver 10.0.2.3' > /etc/resolver/com
echo 'nameserver 10.0.2.3' > /etc/resolver/org
echo 'nameserver 10.0.2.3' > /etc/resolver/net
echo 'nameserver 10.0.2.3' > /etc/resolver/de
echo 'nameserver 10.0.2.3' > /etc/resolver/edu
Rafael’s networking information 01/2012
Our reader Rafael writes:
For the network problem it’s just a matter of patching kvm module and you can use full acceleration, the patch is know (qemu dev don’t want it because it’s specific to qemu userland software and they want kvm module to remain compatible with other userland software - which ones? ): Pick the latest kernel module from: http://sourceforge.net/projects/kvm/files/kvm-kmod/ Open the x86/ioapic.c file: search for this function: int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level) and change: level ^= entry.fields.polarity; to //level ^= entry.fields.polarity; And then rtl8139 will work as well as AppleIntelE1000 from : svn co https://osx86drivers.svn.sourceforge.net/svnroot/osx86drivers/AppleIntelE1000/AppleIntelE1000 –> but this last is derived from linux so it lacks debug specific part but I think this is the more interesting given you can redistribute it. If you use recent xnu kernel you also need to patch qemu (or use kernel patched) to tell you use apic version 14 ( qemu dev don’t want ton upgrade apic version as they don’t have too to run linux or windows) or you will hit an assert/kp from kernel. Open hw/apic.c from qemu source: In this function: static uint32_t apic_mem_readl(void opaque, target_phys_addr_t addr) Change: val = 0x11 | ((APIC_LVT_NB - 1) << 16); / version 0x11 / to val = 0x14 | ((APIC_LVT_NB - 1) << 16); / version 0x14 */
Thanks Rafael for sharing this information, which is not easy to find. kvm is doing really great these days.
QSOC project on Darwin support in QEMU
http://wiki.qemu.org/Google_Summer_of_Code_2012#Finish_OS_X_Virtualization_Support
References
- Darwin on QEMU Forum
- T2 KVM packages which are able to boot PureDarwin nano (thanks rxr)
- QEMU 0.10 binary for Windows which is able to boot PureDarwin (thanks oxygene)
- QEMU 0.10 binary for Ubuntu which is able to boot PureDarwin
- QEMU 0.10.1 binary for Mac OS X which is able to boot PureDarwin
- http://bellard.org/qemu/ (QEMU)
- http://www.kju-app.org/ (Q) this front-end is unfortunately not usable (last update was one year ago) for PureDarwin.
hfsprogs
debian and Ubuntu have a package called “hfsprogs”, which can be used to create HFS+ disk images:
apt-get install hfsprogs
mkfs.hfsplus disk.hfsplus
Initialized disk.hfsplus as a 100 MB HFS Plus volume
file disk.hfsplus
disk.hfsplus: Macintosh HFS Extended version 4 data last mounted by: '10.0', created: Mon Mar 23 18:32:16 2009, last modified: Mon Mar 23 18:32:16 2009, last checked: Mon Mar 23 18:32:16 2009, block size: 4096, number of blocks: 25600, free blocks: 25197
sudo mkdir /media/hfsplus
sudo mount disk.hfsplus /media/hfsplus/ -o loop
Now we can copy something there
(How) can we use this disk image with qemu?
If we want to make this bootable with a boot loader, we need to have a partition table inside the disk image!
Probably we need to do this along these lines:
http://wiki.eeeuser.com/howtocustomrestoreimage:pt2mkcustomimage
RPM Package Manager
The RPM Package Manager is a package manager and package format commonly used for Linux distributions. RPM also runs on Darwin. MacPorts is capable of producing RPMs including depencency information.
This page describes how to use RPM on a PureDarwin system.
About RPM
RPM is the package manager and package format used by Red Hat, Novell/SUSE, Mandriva, and other Linux distributions. It is located at http://rpm.org/
RPM5 is a branch of RPM located at rpm5.org. Although both have common roots, it is not the branch of RPM that is used by Red Hat, for example. It is located at http://rpm5.org/ More about the differences can be found here, for example.
RPM in MacPorts
MacPorts provides ports for RPM. However, there is a chicken-and-egg problem because RPM and its dependencies need to be installed before RPM can be used itself.
port search rpm
apt-rpm sysutils/apt-rpm 0.5.15lorg3.93 Automatic updater and package installer/remover for RPM
rpm sysutils/rpm 4.4.9 The RPM package management system.
[...]
rpm50 sysutils/rpm50 5.0.3 The RPM package management system.
rpm51 sysutils/rpm51 5.1.4 The RPM package management system.
RPM from rpm5.org
The rpm package from rpm5.org is a self-contained bundle that comes with all the dependencies that are not part of Darwin itself.
However, even after it has been installed it says “package rpm is not installed”. Bug?
Installing RPM5 on PureDarwin
To install RPM5 on a PureDarwin system, do the following:
- Download the dmg from http://rpm5.org/files/rpm/rpm-5.1/BINARY/
- Mount the dmg on the Mac, copy RPM5.pkg to the root of the PureDarwin system
- On the target system, do: This installs RPM5 to /usr/local/bin/rpm. The RPM database is located at /var/local/lib/rpm/.
Make sure the following depenencies are met on the PureDarwin system:
- /usr/lib/libbz2.1.0.dylib
- /usr/lib/libxml2.2.dylib (DarwinBuild project libxml2)
- /usr/lib/libSystem.B.dylib
- /usr/lib/libz.1.dylib
- /usr/lib/libiconv.2.dylib
- /usr/lib/libssl.0.9.7.dylib (DarwinBuild project OpenSSL)
- /usr/lib/libcrypto.0.9.7.dylib
- /usr/lib/libgcc_s.1.dylib
Building RPMs with MacPorts
Follow the instructions on the MacPorts page and use /opt/local/bin/port rpm someproject.
Should you get an error about missing parts, then do /opt/local/bin/port unarchive someproject before.
Useful RPM commands
To run commands on RPMs that are not installed yet, add the p option as shown below.
- Install a package rpm -ivh –noparentdirs somepackage.rpm
- Show which packages are installed
rpm -qa - Show information about an package
rpm -qi ``somepackage or rpm -q**p**i somepackage**.rpm** - Show which files are in an package
rpm -ql somepackage or rpm -q**p**l somepackage**.rpm** - Show which dependencies a package requires `rpm -qR somepackage or rpm -qpR somepackage.rpm
- Remove an installed package rpm -e somepackage
- Show help rpm –help
Troubleshooting
org.macports.darwin9 is needed
**Problem: **Each package fails to install with the message “org.macports.darwin9 is needed”. **Solution: **Satisfy the dependency to org.macports.darwin9 by installing the RPM below. This is a dummy package that contains no actual software but tells the RPM database about the Darwin base system (specifically, the parts installed from DarwinBuild rather than MacPorts). It is based on http://svn.macports.org/repository/macports/users/afb/macosx-base.spec and was built with ``
Installation fails due to dependencies on itself
Problem: When trying to install a package, RPM complains that directories are missing that are either part of the base system or should be part of the package that is about to be installed.
bash-3.2# ls /opt/local/
bin/ etc/ include/ lib/ share/ src/ var/
bash-3.2# rpm -ivh /libiconv-1.12-0.i386.rpm error: Failed dependencies:
/opt/local/bin is needed by libiconv-1.12-0.i386
/opt/local/include is needed by libiconv-1.12-0.i386
/opt/local/lib is needed by libiconv-1.12-0.i386
/opt/local/share/doc/libiconv-1.12 is needed by libiconv-1.12-0.i386
/opt/local/share/man/man1 is needed by libiconv-1.12-0.i386
/opt/local/share/man/man3 is needed by libiconv-1.12-0.i386
**Solution: ** please let us know.
Disk fills up quickly
**Problem: **When using RPM a lot, the disk fills up quickly. Solution: By default, RPM5 saves any RPM that you uninstall in /var/local/spool/repackage/. This can be disabled by changing %repackage_all_erasures to 0 in /usr/local/lib/rpm/macros.
To be investigated
OpenDarwin 6.2.2 had RPMs for the projects in DarwinBuild. How were these made?
sh-3.2# rpm -qip /Volumes/OpenDarwin6.6.2/System/Installation/RPMS/org.opendarwin.misc_cmds-6.6.2-4.fat.rpm Name : org.opendarwin.misc_cmds Relocations: (not relocatable) Version : 6.6.2 Vendor: OpenDarwin Release : 4 Build Date: Sun Jul 6 10:15:26 2003 Install Date: (not installed) Build Host: lamancha.opendarwin.org Group : System Source RPM: org.opendarwin.misc_cmds-6.6.2-4.src.rpm Size : 490564 License: ? Signature : (none) Summary : misc_cmds Description : OpenDarwin project misc_cmds
According to #opendarwin, these were built before DarwinBuild was around. A Perl script was used to generate RPM spec files, and the contents od the DSTROOT was packaged up.
A quick and dirty way to unpack a directory of RPMs
UNP=$(find i386/*.rpm) && for UN in $UNP; do ./opt/local/bin/rpm2cpio $UN | cpio -i -d -v ; done
Thanks
afb from #macports contributed knowledge to this page.
SmartCard Services
draft. **The SmartCard Services project. ** Overview
Sources from Apple are divided in two branches respectively corresponding to Darwin 9 and Darwin 10. Each branch contains these three nested subprojects:
- SmartcardCCID
- SmartCardServices
- Tokend
Status
Darwin10
SmartCardServices build Tokend build
Darwin 9
SmartcardCCID build
Smart Card CCID
Licensed under LGPL v2.1
ccid libusb (statically linked insto Smart Card CCID)
Smart Card Services
Licensed under APSL v2
Contains: reader drivers (.bundle) for readers not supported by USB CCID Class Driver reader drivers KErnel eXTension (PPC only?) manual pages pcscd (PCSC daemon)
- responsible of reader drivers dynamic (de)allocation at run-time
- manage reader connections PKCS11 library (legacy SC abstraction layer) various scripts
TokenD
Licensed under APSL v2
Darwin 10
- BELPIC.Tokend - Belgian National ID (BELPIC) compliant Smart Cards
- CAC.Tokend - Common Access Card (CAC) compliant Smart Cards
- JPKI.Tokend - Japanese PKI (JPKI) compliant Smart Cards
- PIV.Tokend - Personal Identity Verification (PIV) compliant Smart Cards
- tokendPKCS11.so - PKCS#11 Shim over Tokend
Darwin 9
- BELPIC.Tokend - Belgian National ID (BELPIC) compliant Smart Cards
- CAC.Tokend - Common Access Card (CAC) compliant Smart Cards
- JPKI.Tokend - Japanese PKI (JPKI) compliant Smart Cards
- PIV.Tokend - Personal Identity Verification (PIV) compliant Smart Cards Building
darwinbuild
Host: Darwin 10 (Snow Leopard) Buildroot: Darwin9 (9J61)
SmartCardServices
Problem: /Developer/usr/bin/xcodebuild fails with 11 - Resource deadlock avoided Solution: …
Tokend
Problem: /Developer/usr/bin/xcodebuild fails with 11 - Resource deadlock avoided
SmartcardCCID
cd 9J61 darwinbuild -init http://smartcardservices.macosforge.org/trac/export/71/trunk/SmartcardCCID/SmartcardCCID.plist -nfs
darwinbuild SmartcardCCID
Problem: (cd /SourceCache/SmartcardCCID/SmartcardCCID-1/ccid/ccid && ./MacOSX/configure –no-configure –disable-opensc ) /bin/sh: line 0: cd: /SourceCache/SmartcardCCID/SmartcardCCID-1/ccid/ccid: No such file or directory make: *** [install] Error 1 Solution: cd BuildRoot/SourceCache/SmartcardCCID/SmartcardCCID-1/ccid tar xjvf ccid-1.3.8.tar.bz2 ln -s ccid-1.3.8 ccid
Problem: /bin/sh: /SourceCache/SmartcardCCID/SmartcardCCID-1/libusb/libusb/configure: No such file or directory make[1]: *** [/private/var/tmp/SmartcardCCID/SmartcardCCID-1.obj/libusb/configure-stamp] Error 127 make: *** [install] Error 1
Solution: chroot BuildRoot cd SourceCache/SmartcardCCID/SmartcardCCID-1/libusb tar xzvf libusb-0.1.13b.tar.gz ln -s libusb-0.1.13b libusb cd libusb ./autogen.sh make distclean
Then the build succeeds: BUILD TIME: 0h 2m 8s EXIT STATUS: 0 SmartcardCCID - 7 files registered.
Resources
http://smartcardservices.macosforge.org http://smartcardservices.macosforge.org/trac/wiki
The boot process
This page describes the boot process of a Darwin 9 system. This is a first draft, please feel free to contribute.
Single-user (-s/cmd-S)
This is a top-level overview about the Darwin 9 boot process in single-user mode.
During single-user boot, the following things happen: (please add to the list) The firmware (either BIOS or EFI) initializes the hardware
- On BIOS machines, the screen is black and shows white text during this process
- On EFI machines, the screen is gray and shows nothing during this process (this applies to Intel Macs, other EFI machines might have other implementations) The boot loader is loaded by the firmware
- On BIOS machines, boot is loaded and a boot-132 message is shown
- On EFI machines, efiboot is loaded and an Apple logo but no spinner is shown (this applies to Intel Macs, other EFI machines might have other implementations) The boot loader reads /Library/Preferences/SystemConfiguration/com.apple.Boot.plist
- If the file is not present, the boot loader prints an error message The boot loader loads XNU and the kernel extensions (kexts)
- On BIOS machines, a spinning star or a list of kexts being loaded is shown
- On EFI machines, an Apple logo but no spinner is shown (this applies to Intel Macs, other EFI machines might have other implementations) XNU is loaded
- If the essential KEXTs (especially the Platform Expert, which is in AppleACPIPlatform.kext) were loaded successfully as well, the kernel starts and prints a copyright message mentioning University of California at Berkeley XNU loads KEXTs (for the first time; those with OSBundleRequired set to “Root”) and waits for the root device
- If the root device can be accessed using the available kexts, the kernel prints the message “Got root device”; at some point thereafter the rest of the KEXTs are loaded (those without OSBundleRequired set to “Root”)
- If the root device cannot be accessed using the available kexts, the message reads “Still waiting for root device…” instead The kernel starts /sbin/launchd on the root device launchd starts /bin/launchctl launchctl starts /bin/bash
Multi-user
Same procedure as described above for single-user boot, but instead of the last step (“launchctl starts /bin/bash”) the following happens:
- … (Please write text here)
Netbooting (-n/cmd-N)
Same procedure as described above for single-user boot, but instead of the last step (“launchctl starts /bin/bash”) the following happens:
- … (Please write text here)
bless
bless is the command used on Mac OS X to make volumes bootable. This page discusses the bless command and its applicability in a PureDarwin system.
It is a work in progress; please contribute.
What is bless
bless is a command line tool on Mac OS X and Darwin to make volumes bootable. It also includes libbless, a library which is used by other applications (such as installers) to make volumes bootable. The bless project is available as Open Source from Apple.
“Worlds” supported by bless
efiboot
The bless command is used to set up the “efiboot” boot loader on Intel-based Macintosh systems which use EFI as their firmware.
(to be written)
boot
The bless command was used to set up the “boot” boot loader on generic BIOS-based systems in older versions of Darwin.
bless-24 was known to work with BIOS-based machines. It appears that bless-37.1.4 from 2006 was the latest version that contained BIOS code. Later versions of bless are no longer capable of blessing a volume so that it works on BIOS-based machines.
* Revision 1.21 2006/01/02 22:27:28 ssen
* <rdar://problem/4395370> bless should not support BIOS systems
* For RC_RELEASE=Leopard, keep BIOS support, but preprocess it out
* for Herbie and the open source build
(Maybe the BIOS-related portions of the code should be patched back in by PureDarwin.)
(to be written)
BootX
Was used to set up the “BootX” boot loader on “New World” and “Old World” PowerPC computers which used OpenFirmware as their firmware. Not relevant for PureDarwin.
Using bless
The usage of the bless command varies depending on which “world” you are targeting. Please refer to the bless manpage that comes with the bless command.
bless alternatives
A method to make a disk bootable on BIOS and EFI machines without using the bless command is described on the boot page.
References
- http://src.gnu-darwin.org/DarwinSourceArchive/expanded/bless/bless-37.1.4/libbless/BIOS/
boot
The boot project contains the bootloader that is used to boot the system on generic hardware through BIOS.
What is boot
boot is a series of files that collectively act as bootloader for BIOS-based hardware.
- boot (sometimes referred to as “boot2”) HFS+ startup file, lives in the HFS+ file system structure (not a regular file). (Could also be used as a regular file; using a special version of boot1h that would no longer need it to be HFS+ the startup file.)
- Master Boot Record (MBR), lives in the first 440 bytes of the disk (not identical to the MBR from other OSes)
- boot1h stage 1 booter (bootsector) for HFS+ partitions, lives in the first 512 bytes of the partition
- boot1u (not used by PureDarwin)
- boot1u0 (not used by PureDarwin)
- cdboot booter for CD-ROMs (only works with valid Extensions.mkext due to a bug)
- chain0 (tbd; probably not used by PureDarwin)
Since Intel-based Macintosh computers use EFI instead of BIOS, they need to use a different bootloader, efiboot. Another alternative to the above two bootloaders, is the new XNU loading support in grub2 (currently known as just grub), which works on both platforms (EFI and BIOS based) . For more information, check out this page (archived since XNU support has not been mentioned in newer versions of grub docs).
Requirements
To use boot, you need:
- A MBR-formatted HFS+ volume containing a Darwin system
- startupfiletool (source)
- boot-132 (patched (archive) to include the EFI tables the Darwin system expects to be present)
Installation
The disk needs to contain a HFS+ volume, and it must not be mounted.
launchctl unload /System/Library/LaunchDaemons/com.apple.diskarbitrationd.plist
startupfiletool ${RDEVICE}s1 boot
sleep 3
dd if=boot1h of=${RDEVICE}s1 bs=512 count=1
sleep 3
dd if=boot0 of=${DEVICE} bs=440 count=1
sync
launchctl load /System/Library/LaunchDaemons/com.apple.diskarbitrationd.plist
The chameleon boot loader (a fork of boot-132) has a greatly simplified installation procedure, since it does NOT need the disk to be unmounted, and it does NOT need startupfiletool:
fdisk -f boot0 -u -y /dev/rdiskX # Install boot0 to the MBR
dd if=boot1h of=/dev/rdiskXsY # Install boot1h to the partition's bootsector
cp boot /Volumes/XXX # Install boot to the volume's root directory
Troubleshooting
Non-System Disk
Problem: You get the error
Boot0: MBR
Boot0: Done
Non-System Disk
Solution: You need to set the partition bootable (“boot flag”, “set partition active”), e.g., using fdisk:
sh-3.2# fdisk -e /dev/rdisk1
Enter 'help' for information
fdisk: 1> f 1
Partition 1 marked active.
fdisk:*1> w
Device could not be accessed exclusively.
A reboot will be needed for changes to take effect. OK? [n] y
Writing MBR at offset 0.
fdisk: 1> q
sh-3.2#
Wrong system booted by default
Problem: On a system with multiple OSes, boot wants to boot the wrong (non-PureDarwin) one by default. This happens when a non-HFS+ partition (e.g., FAT32 or NTFS) has the bootable (“active”) flag and comes before the HFS+ partition that contains PureDarwin.
Solution: Modify boot so that it uses the first HFS+ partition instead of the first partition with the bootable (“active”) flag:
In boot-132/i386/lib/libsaio/sys.c, comment the following line:
for ( bvr = chain; bvr; bvr = bvr->next )
{
if ( bvr->flags & kBVFlagNativeBoot ) bvr1 = bvr;
// if ( bvr->flags & kBVFlagPrimary ) bvr2 = bvr;
}
Graphics Mode
Resolution Color Depth
** ** ** 4** ** 8** ** 24** ** 32** 640x400 640x400x256
640x480 640x480x256 640x480x555 640x480x888 800x600 800x600x16 800x600x256 800x600x555 800x600x888 1024x768 1024x768x16 1024x768x256 1024x768x555 1024x768x888 1280x1024 1280x1024x16 1280x1024x256 1280x1024x555 1280x1024x888
To be continued…
Booting from CD-ROM
This page describes how to produce a CD-ROM (or DVD, for that matter) which can boot Darwin on both EFI- and BIOS-based systems.
What we want to do
Master a CD from which both EFI- (Intel Mac) and BIOS-based (PC) systems can boot.
An Intel-based Macintosh will actually be able to boot the volume either through EFI (right-hand side) or through its Compatibility Support Module (“Boot Camp”) BIOS emulation (left-hand side, misleadingly labeled “Windows”).
How hybrid images work
The key is to use a HFS+ filesystem for the image (thus, making a “.dmg” rather than a “.iso”) and “injecting” parts of an El Torito ISO into it, This is called a “hybrid image”.
How to create a hybrid image using pd_makedmg
To create a hybrid image, you can use the pd_makedmg script. It is based on darwinmaster.sh, and has been extended to support EFI booting in addition to BIOS booting. Its syntax is as follows:
pd_makedmg /Volumes/PureDarwinDisk /tmp/puredarwin.dmg PureDarwin
This would take the files located at /Volumes/PureDarwinDisk (which should contain a working Darwin installation) and turn them into a disk image located at /tmp/puredarwin.dmg with the name of “PureDarwin”, which could be burned to a CD e.g., using Disk Utility.
Note that pd_makedmg currently needs a Mac to run, since it makes use of commands like hdiutil which are not part of Darwin.
How pd_makedmg works
Here is what it essentially does:
- Creates
Extensions.mkextfrom the kexts in the source tree - Makes a temporary ISO that contains the boot-132 files and that has cdboot as its El Torito boot image (this allows BIOS-based machines to boot)
- Creates, initializes and mounts a HFS+ disk image (dmg)
- “Injects” parts of the temporary El Torito ISO into the dmg using
dd if="$ELTORITOISO" of=$rdev skip=64 seek=64 bs=512(Do not actually execute this command. It is ran automatically by the script.) - Copies the contents of the source tree to the dmg
- Blesses
boot.efi(this allows EFI-based machines to boot)
kexts needed for booting from CD-ROM
Following the instructions from above should produce a CD that boots at least to the point Still waiting for root device.... For the kernel to be able to access the CD, the necessary kexts need to be installed of course. These are, in addition to the minimal set of kexts:
- IOATAPIProtocolTransport.kext
- IOCDStorageFamily.kext
- IODVDStorageFamily.kext
- IOBDStorageFamily.kext (Blu-ray Disc driver; available for Darwin as binary only)
To do
- Remove any tools that are not part of Darwin
- replace
hdiutil createwith a simpledd if=/dev/zeroandhdid -nomountwithlosetup… and it would appear to work on Linux then (dfe)
Booting from the network via PXE
There are now at least 2 known working ways to get forked versions of boot-132 running via PXE. This page describes the two approaches and provides scripts for you to try it out yourself.
Note that right now this page ends where boot-132 is loaded; the rest can be read on DFE’s blog.
Booting PureDarwin with a PXE-enabled boot-132
Apparently DFE has written the missing Darwin/x86 first-stage network boot program (NBP), a first-stage loader for boot-132.
Basically, booting PureDarwin over the network involves the following steps:
- Client network card firmware asks DHCP server
- DHCP server asks dnsmasq on the server
- dnsmasq sends TFTP information
- Client network card firmware downloads boot1pxe.0 file specified by dnsmasq from dnsmasq
- boot1pxe.0 loads boot (boot-132) (known to work up to this point)
- boot-132 loads mach_kernel and Extensions.mkext from the server (still to be implemented)
- mach_kernel loads network kext and uses it to load the root volume from the network (still to be implemented)
- Root volume image detects that it is booted via the network and sets up ramdisks etc. as needed (like on Mac OS X network boot) You can try this variant by:
- Run Ubuntu 9.10 Live CD (we are using this as the server for now; later we could use PureDarwin as the server)
wget "http://sites.google.com/a/puredarwin.org/puredarwin/developers/booting/boot/pxe/boot-boot1pxe.bash?attredirects=0&d=1" -O ./boot-boot1pxe.bash ; sudo bash ./boot-boot1pxe.bash
Booting PureDarwin via Chameleon via mboot.c32 via pxelinux via PXE
Another route is pxelinux which can boot multiboot kernels via PXE. Since mach_kernel itself is not a multiboot-compliant kernel, we need to use a multiboot-compliant fork of boot-132 (such as Chameleon), and load it with the mboot.c32 pxelinux plug-in.
Basically, booting PureDarwin over the network involves the following steps:
- Client network card firmware asks DHCP server
- DHCP server asks dnsmasq on the server
- dnsmasq sends TFTP information
- Client network card firmware downloads pxelinux.0 file specified by dnsmasq from dnsmasq
- pxelinux downloads its configuration
- pxelinux loads mboot.c32 which is a multiboot loader
- mboot.c32 loads boot which is a multiboot-compliant version of boot-132 such as Chameleon (known to work up to this point)
- boot-132 loads mach_kernel and Extensions.mkext from a supplied ramdisk (still to be implemented)
- mach_kernel loads network kext and uses it to load the root volume from the network (still to be implemented)
- Root volume image detects that it is booted via the network and sets up ramdisks etc. as needed (like on Mac OS X network boot) You can try this variant by:
- Run Ubuntu 9.10 Live CD (we are using this as the server; later we could use PureDarwin as the server)
wget "http://sites.google.com/a/puredarwin.org/puredarwin/developers/booting/boot/pxe/boot-chameleon-over-pxelinux.bash?attredirects=0&d=1" -O ./boot-chameleon-over-pxelinux.bash ; sudo bash ./boot-chameleon-over-pxelinux.bash
Information from dfe’s blog
The following is mirrored from dfe’s Be free little PXEs, be free! blog entry at https://tgwbd.org/blog/2009/10/17/be-free-little-pxes-be-free/
Posted Saturday, October 17, 2009 09:15:19 PM by dfe
Those of you looking over at the bootloader page have probably been rather disappointed to see no new postings for over a year. In reality I’ve made several nice changes and I need to do several posts so people are aware of them. For now we’re going to start with PXE.
For those unaware, PXE is a specification for booting PCs over the network. The proper name is Preboot eXecution Environment but it’s generally referred to by the pronunciation of its acronym: pixie.
In its most basic form, PXE operates as follows:
- Computer is turned on
- PXE boot is selected, usually by pressing F12 (standard key). On some BIOS, F12 selects PXE boot. On most newer BIOS, F12 brings up a menu and one of the choices will be something like “PXE” or “Network Boot Agent” or whatever.
- PXE BIOS code stored in ROM initializes the network hardware and brings up link
- A DHCP request is issued
- A DHCP response is received including the address from which to download a boot file and the TFTP path to that file
- PXE ROM code downloads the file in to RAM at 0:7C00h.
- PXE ROM code jumps to 0:7C00h.
A few notes: 0:7C00h is linear 0x7C00 which is the 31k mark in the first segment and the standard boot address. According to the spec, the ROM should be able to load linearly all the way up to the top of “real mode” RAM (640k mark). In practice many ROMs balk at anything that would exceed the end of the first 64k segment. That is 33k and the spec recommends limiting boot file size to 32k for other reasons. Also, because it is a jump to 0:7C00 you cannot execute a return. What you can do is invoke software INT 18h which sort of serves like an abort() call.
The Darwin implementation follows the specification pretty well. The boot1pxe binary (an NBP, Network Boot Program) is downloaded and loaded by the PXE ROM. Similar to the boot1u program for UFS filesystem booting, the boot1pxe program is a 32-bit program using portions of the same support libraries that boot2, the real booter, uses. The NBP uses the boot server discover reply packet to retrieve its own filename. From there it knocks off the last path component (i.e. the thing after the last “/”) and replaces it with “boot”. That is the name of the real boot program and is the same exact “boot” binary used as the HFS+ startup file and in other places. The boot1pxe NBP loads it to 2000:0200h, cleans itself up, and jumps to the booter.
Once the real booter has started it is able to detect that it was loaded via PXE. The boot process is virtually identical to the process on a hard drive from a UI standpoint. That is, there will be an entry in the device list representing the PXE server and a prompt where you can add all the usual options. In addition, all of the ordinary UI applies so if you want to you can at this point opt to instead directly boot an OS X volume on the hard drive or even chain to another OS partition. This is particularly useful if you’ve hosed the boot code on your hard disk and simply want to boot to it.
That said there are some special considerations for PXE boot. Because TFTP does not provide any facility for enumerating directory contents, the booter must know in advance which files to load. Those files are com.apple.lre.Boot.plist or com.apple.Boot.plist, mach.macosx, and mach.macosx.mkext. The booter uses the same trick that boot1pxe used to find it. That is, it uses the pathname from the boot server’s discover reply packet as the base for all filenames.
On the TFTP server you will want to create a directory containing all of the boot files. One very simple option is to simply use Mac OS X Server and the network boot tools from the Server Administration Tools package to set up the boot. In general it likes to set things up in a directory like {unique-name}.nbi/i386/. So for example, 10a432.nbi/i386/mach.macosx will be the kernel (normally named mach_kernel).
The list of files you need is as follows:
boot1pxe: The NBP that will be loaded by the PXE ROM boot: The normal booter program loaded by boot1pxe com.apple.lre.Boot.plist: Booter configuration file mach.macosx: The xnu kernel. mach.macosx.mkext: An Extensions.mkext archive for this kernel booter: Not needed, but if you use the “System Image Utility” you will find that this is just boot.efi On the DHCP server you simply need to set next-server to the correct TFTP server (strongly recommended this be the same as the DHCP server) and set the boot filename to /path/to/whatever.nbi/i386/boot1pxe. You may also want to set root-path option in DHCP although you can instead specify it using rp= on the command-line (including in the boot plist of course).
As an alternative to setting these DHCP options on your real DHCP server you can instead set up a separate boot server. One such boot server is Microsoft’s Windows Deployment Services (WDS) or the older Remote Installation Services (RIS). I have not figured out a way to add non-Windows choices to the WDS native menu but you can add non-Windows choices in WDS Legacy which is just Microsoft’s new name for RIS. Setting up a choice in RIS will have to be the subject of another blog entry.
When the booter boots from PXE it sets rd=en in the kernel boot args. This tells the kernel that the root device is ethernet. The kernel then looks for the root path in either the DHCP options or from the rp= option. Assuming you have the IOHDIXController.kext you can use an HTTP server so you would have e.g. rp=http://192.0.2.1/path/to/whatever.dmg on the command line in the boot plist or the http URL in the root-path DHCP option. If you don’t have IOHDIXController then it may be possible to specify an NFS path to a disk image. A glance at the kernel source seems to indicate that it has some facility for mounting flat disk images (using BSD vndevice) as the root.
There is one little gotcha about the root-path option and this is actually true of booting a Macintosh using Apple’s special Boot Service Discovery Protocol. That is that the firmware does not request the root path option. So it is incumbent upon the DHCP server to send the value even though the client did not request it. ISC DHCP has a way of telling it to send additional unrequested options. It is, however, probably easier to just set rp= in the boot plist.
The last piece of the puzzle is building mach.macosx.mkext. You cannot just use one copied from your hard drive as it is unlikely to contain the network drivers. Interestingly though, the copy on the Snow Leopard DVD does. So if you don’t need any additional extensions then you can use it outright. In practice the only machines that don’t need extra extensions are genuine Macs. So if you were using something like a gPXE CD to boot a real Mac over the network you could do this. But of course you’re then booting OS X via the BootCamp legacy BIOS layer which breaks a few things.
To build the mach.macosx.mkext you just use the ordinary kextcache tool. The general form is as follows: kextcache -m mach.macosx.kext [-n] [-l] /path/to/System/Library/Extensions … /path/to/SomeAdditional.kext …. You do not need to and should not run kextcache as root because we’re using it in a mode where it outputs an mkext file instead of updating the running system’s mkext. The options break down as follows:
- -m {output-file}: Specifies that an mkext is to be output to the specified output file
- -n: Specifies that only extensions required to mount the root filesystem over the network are to be included
- -l: Specifies that only extensions required to mount the root filesystem from a local disk are to be included.
- /path/to/Extensions: One or more directories containing .kext bundles can be specified. If provided, the -n and -l filters apply to the kexts found.
- /path/to/SomeAdditional.kext: One or more additional extensions can be included in the archive. The -n and -l options do not apply and these extensions will always be included
With neither -n or -l no filtering takes place so all extensions are included resulting in a rather hefty mkext. With -n and -l you will get almost all the kexts you need. If -n and -l are failing to include some kext you know you need then you can specify it directly on the command-line to override this. These options look at the OSBundleRequired key in the Info.plist of each kernel extension. If its value is Root then either one will include it. If it’s Local-Root then -l will include it and if it’s Network-Root then -n will include it.
Once the booter has loaded the kernel and mkext archive it jumps to the kernel as per usual. At this point it’s all about having enough driver support to bring up the network and mount the root disk image. The disk image itself is simply an ordinary OS X image. It is quite possible to use the normal DVD image as the root image. If you have a paid ADC account, the dmg files provided for download by Apple work out of the box.
Of course you aren’t limited to installer images. The System Image Utility can be used to create a directly bootable image or you can even build one by hand. You are, however, limited to a read-only root FS similar to booting from a CD or DVD. Of course you can always mount some ramdisks for temporary files and NFS or AFP or SMB shares for permanent files.
The great thing about network booting is that it is extremely fast. With a basic fileserver it’s on par with hard drive boot. If you have a fast server with fast disks, RAID, and a decent disk cache it can actually be quite a bit faster. In all cases, installing OS X off the network is certainly faster than off of a DVD. Generally you should see the GUI in about a minute as opposed to say five minutes when booting off a DVD.
There are of course a myriad of uses for network boot support. The most obvious one is to quickly install OS X. Beyond that, the network boot support has made developing the booter far easier. Prior to this testing the code involved building a vmdk or iso image, shutting down the VM, and rebooting with the new disk or CD image. With the network boot support I can set the VM to boot off the network, copy new binaries to the boot server, and simply reboot the VM. A similar situation applies for kernel or kernel extension development. With a quick little shell script I can have the code built and deployed to the boot server and I can quickly reset the target machine and start the new code running immediately.
There are other useful tricks too. Say I want to test El Torito support on some machine. The only way to have the El Torito stack correctly installed is to have booted from a CD. So I go to ROM-o-matic.net download a gPXE ISO and burn that to a CD. Now I can change the bootloader code simply by dropping a new binary on the network but because boot occurred from CD one of the BIOS devices will be the CD.
In short, if you can take a minute or two to set up a boot server you can make your life a lot easier when bringing up Darwin or OS X on a new machine.
Chameleon
The Chameleon bootloader is an APSL project based on David Elliott’s fake EFI implementation added to Apple’s boot-132 project.
The source code repository is available at http://forge.voodooprojects.org/p/chameleon/source/tree/HEAD/
Chameleon brings some nice features from low to high layers as: Preboot ramdisk image, EFI partition booting, hibernation/resume, DSDT and SMBIOS, GUI booting and custom themes supports.
draft.
Status
- Chameleon 2.0-RC4-r684 works with QEMU v0.10.6 and VMware (Fusion) 3.0.1 on a Mac.
- Chameleon 2.0-RC3-r658 works with QEMU (mac & win tested), VMware (Fusion), etc.. Prolematic points reached on windows with e.g. vmware (“Mach-o has bad magic number” error).
- Chameleon 2.0-RC1-r431 works with QEMU.
- Chameleon 2.0-RC1-r431 will not show up in VMware (observed in Fusion but not in Player), because VMware relies on darwin.iso (VMware Tools) which contains the DFE bootloader (Stage 2 boot file < 128K) is ok.
- In case of real hardware target, cdboot, boot, boot0 and boot1h have been deployed but not yet tested.
- In Image disk, virtual or not, cdboot and the “El Torito ISO trick” is used.
- Note: The error “Error parsing plist” in i386/libsaio/stringTable.c, the function “long ParseXMLFile( char * buffer, TagPtr * dict )” is responsible of returning the error.
if (length < 0) {
error ("Error parsing plist filen");
return -1;
}
Why is it failing? The plist is obviously well formated and there is no permission problem at this level. Problem: “Error parsing plist file” Solution: In fact, the error comes from the memory allocation, it seems that 256MB is not enough and make it fails in the contrary of e.g., 384M.
Some features
Please see “Introducing new features added to next version of Chameleon”, part 1 and part 2.
Default partition
A default partition to boot can be specified. Add to com.apple.Boot.plist: <key>Default Partition</key> <string>hd(x,y)</string>
Customizable UI
``
Custom UI
Default UI
RAM speed
<key>SMmemspeed</key> <string>800</string>
How to update PureDarwin running inside qemu to the latest Chameleon bootloader 11/2011
sudo apt-get install dmg2img
dmg2img /home/mint/Downloads/2120-Chameleon v2.1VS r1701.dmg
# Run qemu with
-hdb /home/mint/Downloads/2120-Chameleon v2.1VS r1701.img
PureDarwin:~ root# mount
/dev/disk0s1 on / (hfs, local, journaled)
PureDarwin:~ root# fdisk -f "/Volumes/Chameleon 2 VS//Manual Install/boot0" -u -y /dev/rdisk0
PureDarwin:~ root# dd if="/Volumes/Chameleon 2 VS//Manual Install/boot1h" of=/dev/rdisk0s1
PureDarwin:~ root# cp "/Volumes/Chameleon 2 VS//Manual Install/boot" /
Chameleon v2.1VS r1701 seems no longer to be able to boot PD9, crashes immediately when loading the kernel
Resources
http://chameleon.osx86.hu Source code repository
efiboot
The efiboot project contains boot.efi, the bootloader that is used in Intel Macs to boot the system.
What is boot.efi
boot.efi is a Universal EFI binary with 2 architectures, i386 and x86_64. It can be used to boot Intel-based Macintosh computers with both 32-bit (e.g., first-generation MacBook Pro) and 64-bit firmwares (e.g., Santa Rosa MacBook Pro).
Requirements
efiboot requires EFI to work. Computers that do not have EFI need to use other bootloaders, such as boot. To use efiboot, you need:
- An Intel-based Macintosh (or another computer with EFI that can read HFS+; no such computer is known)
- A HFS+ volume containing a Darwin system
- efiboot
bless
Installation
To make a volume bootable through EFI, efiboot needs to be installed. Simply copying boot.efi, however, is not sufficient. To make it work, there are basically two options:
- Blessing the volume
- moving boot.efi to a special, UEFI-specified location (to be verified)
Blessing the volume
Assuming your Darwin volume is mounted to $MOUNT, do:
"$MOUNT/usr/sbin/bless" -verbose -folder "$MOUNT/System/Library/CoreServices" -bootinfo -bootefi
The above command implements an Xinfo cache for PowerPC processors which is not needed in the case of an Intel-based Macintosh.
For PureDarwin a simplified command can be used that will bless for only EFI based Macintosh computers:
"$MOUNT/usr/sbin/bless" --folder "$MOUNT/System/Library/CoreServices" -bootefi --verbose
The volume should now be bootable.
Moving boot.efi to UEFI-specified location
The firmware of Intel-based Macintosh computers implement sections 3.1 and 3.2 of the UEFI 2.0 specification. UEFI 2.0 defines that the firmware looks for an EFI bootloader at the following locations:
- /EFI/BOOT/BOOTX64.EFI
- /EFI/BOOT/… of FAT16-formatted volumes. Whether this can also be used to boot a Darwin system from a HFS+ volume needs to be verified.
Using boot.efi in VirtualBox
EFI emulation in VirtualBox 4 is capable of loading and executing boot.efi as the bootloader. Hence boot-132 or its derivatives are no longer needed in VirtualBox. We were able to boot PureDarwinNano.iso this way.
GRUB 2
GRUB, the GRand Unified Bootloader, is a boot loader from the GNU project. GRUB 2 is a complete rewrite. In early 2009, Vladimir Serbinenko has added support for booting Darwin to GRUB 2, making it suitable as an alternative to boot-132 (the original Apple Darwin boot loader). However the “COPYING” file stipulates a GPLv3 license. This page discusses how to install and use GRUB 2.
For BIOS-based machines
Getting GRUB 2
Since GRUB 2 is still under heavy development, and since the XNU-related functionality is still very new at the time of this writing (June 2009), your best option for getting the most recent version of GRUB 2 is to compile it from source.
Compiling from SVN using Ubuntu
At the time of this writing, there are some issues with compiling GRUB 2 on Mac OS X and Darwin. Hence, the follwoing instructions assume that you use a Ubuntu 8.10 Live CD (more recent versions should work as well). (This page needs to be updated to explain the procedure using Mac OS X or Darwin as well.)
sudo apt-get update
sudo apt-get install build-essential subversion autoconf ruby bison
svn co svn://svn.sv.gnu.org/grub/trunk/grub2
cd grub2/
./autogen.sh
./configure --enable-efiemu
make
sudo make install
This should install GRUB 2 to /usr/local/bin, from where you can call it to install the boot loader to a disk.
Installing GRUB 2
Once you have installed GRUB 2 to /usr/local/bin as described above, you need to install it to the disk you want to make bootable.
sudo grub-install --root-directory=/media/XXX/ /dev/sdX
This should give a message like
Installation finished. No error reported.
This is the contents of the device map /media/disk//boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script grub-install’. This has been tested with a FAT32-formatted USB stick. You need to replace/media/XXX/ with the mountpoint the partition is mounted to, and /dev/sdX `with the device of the USB stick (not the partition). It might be necessary that you flag the partition bootable using cfdisk. To be investigated: Can we install this to a HFS+ volume from Ubuntu?
Booting Darwin with GRUB 2
GRUB 2 lets you control the kernel and extensions to be loaded in a very fine-grained manner. Please refer to the XNUSupport page of the GRUB wiki for more detailed information. The following searches all disks for /mach_kernel, and boots it using Extensions.mkext:
insmod vbe
insmod gfxterm
search --set ``/mach_kernel
xnu_kernel /mach_kernel
xnu_mkext /System/Library/Extensions.mkext
terminal_output gfxterm boot
For EFI-based machines
GRUB 2 can also be used on EFI-based machines, such as Intel-based Macs.
The procedure is different from the one described above. Basically, you have to compile GRUB 2 as an EFI module, and place it in
/EFI/BOOT/BOOTX64.EFI
/EFI/BOOT/BOOTIA32.EFI
on your disk. When you press the Alt key during boot, your Intel Mac should show the disk as “EFI Boot”. See this thread on the Ubuntu Forums for more information.
References
- http://en.wikipedia.org/wiki/GNU_GRUB
- http://www.gnu.org/software/grub/grub-2.en.html
- http://grub.enbug.org/XNUSupport
- http://ubuntuforums.org/showpost.php?p=7275427&postcount=762
launchd
launchd is a central component of the Darwin and Mac OS X boot process.
About launchd
Starting with Darwin 8, launchd replaces different mechanisms for starting and stopping processes, thus replacing more traditional mechanisms found in other UNIX-like systems such as init, rc, the init.d and rc.d scripts, SystemStarter (Mac OS X), inetd and xinetd, atd, crond and watchdogd. As such, it plays a central role in the Darwin and Mac OS X boot process. It is also a key element of Mach IPC on Darwin and Mac OS X systems.
Making launchd verbose
Whenever you need to debug boot problems that occur after the root device has been found, you should make launchd verbose. Put the following in your /etc/launchd.conf: log level debug and append the following to your /etc/syslog.conf: *.debug /dev/console
Runtime dependencies
The 9F33 binary root of the launchd project has runtime dependencies on the following libraries and frameworks: find /Users/user/Downloads/launchd.root -exec otool -L {} 2>&1 ; | grep “compatibility version” | sort | uniq
- /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
- /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
- /System/Library/Frameworks/Security.framework/Versions/A/Security
- /usr/lib/libSystem.B.dylib
- /usr/lib/libbsm.dylib
- /usr/lib/libedit.2.dylib
- /usr/lib/libgcc_s.1.dylib Unlike in earlier builds, libauto is no longer a runtime dependency of launchd.
launchd from SVN
The launchd project is developed in a publicly accessible subversion repository. To check out the latest development version of launchd, use
svn co http://svn.macosforge.org/repository/launchd/trunk launchd
Note that this might be developed against a later version of the Core OS than what is publicly available. So something like
svn co http://svn.macosforge.org/repository/launchd/branches/SULeopard launchd
might be more appropriate for Darwin 9.
References
The Darwin Package Manager
This is Stuart and Aladin’s proposal for “dm”, a Darwin Package Manager. It is based on the discussion on the Package management page.
Feel free to rip it apart.
Scope
“dm” will be a command line tool used to manage the darwinbuild components of a Darwin system, namely:
- Binary roots available from src.macosforge.org/Roots
- Patched binaries from code.google.com/p/puredarwin (inc. PureDarwin pd_* scripts and PureFoundation)
These locations would be checked in turn for binaries, in the same way that darwinbuild currently checks for patch files and tarballs.
Supersets
darwinup
darwinxref
(patched MacPorts?)
Subsets
“dm” would also be used to install other package managers (e.g., MacPorts), which would then be used to install other packages.
(is a tweaked DarwinBuild where the pseudo-chroot is in fact the root (/) plausible?)
Mandatory files involved at run-time
The Darwin Package Manager should take a filename (if possible) which does not exist in any UNIX distribution and/or GNU/Linux distro.
Some propositions for the filename crossed with other involved filenames (if possible too) described later:
- dm (Darwin package Database) pdpd or pd2 (
- dtpm (Darwin’s Trivial Package Manager)
- dtbi (Darwin’s Trivial Binary Installer)
Where the “dm” tool should be installed has to be discussed, it could be in:
-
/usr/local/sbinAccording to hier it could also be in /usr/local/sbin and by default “dm” is not included in the basic operating system (Darwin).. /usr/ contains the majority of user utilities and applications local/ executables, libraries, etc. not included by the basic operating system -
/usr/sbin/ According to hier.. /usr/ contains the majority of user utilities and applications sbin/ system daemons & system utilities (executed by users)
-
/usr/libexec//usr/ contains the majority of user utilities and applications libexec/ system daemons & system utilities (executed by other programs) -
/opt/local/bin/port Note: If we pach `port’ from the MacPorts project, then the default location is obvious.
Filename To be determined… Permissions Admin privileges, executable, read.. (-r-xr-xr-x root admin ?) Admin users can then use it to add and remove packages as needed. Path To be determined… Miscellaneous The Darwin Package Manager
The PureDarwin Package Database (“pdpd” or “pd2”) is still abstract at this time. For the potential filename:
- “pdpd” or “pd2” for PureDarwin Package Database
- “dpd(b)” for Darwin Package Data(b)ase Note: If we choose to patch `port’ from the MacPorts project, this repository will be useless except if we want to log and/or record in parallel the events.
Filename To be determined… Permissions To be determined… Path To be determined… Miscellaneous The (Pure)Darwin Package Database
A launchd plist file (org.puredarwin.xyzt.plist?) in /System/Library/LaunchDaemons/
Filename org.puredarwin.[tobedetermined].plist Permissions (-rw-r–r– root wheel)
Path /System/Library/LaunchDaemons/ Miscellaneous Launchd plist (scheduling, update..)
darwinup
“dm” will use darwinup for the lowest-level installation and un-installation. darwinup works much like a version control system, keeping track of which files are altered during an install so that it can then “roll back” the file system at un-install time. It does not, however, have any idea of dependencies or the ability to fetch files from repositories. These are the features which “dm” will provide.
If we use darwinup', we could need to list *all* features/possibilities provided by darwinup’, list what we clearly need for a plausible start, and make a diff between both lists.
The PureDarwin Package Database
Central to “dm” will be the PureDarwin Package Database (“pdpd” or “pd2”). This will be based on a complete package list and dependency information extracted from the darwinxref database, augmented with information about packages provided by PureDarwin and others. The tools described below can help compile this information, but the amount of work involved should not be under estimated. Package management systems simplify matters for the user by shifting the task of tracking and resolving package inter-dependencies to those who administer the packaging system.
- For simplicity I’m not planning on keeping darwinxref’s detailed file list information (the contents of each package). Will this be a problem? Will users want to search for individual files? And if they do, could we just use a wrapper around xref.puredarwin.org to retrieve this info? Answer: Each package produced and packages by darwinbuild has a receipt (/usr/local/darwinbuild/receipts/<package>) which lists all of the files added. This will solve the problem for installed packages.
To the data from darwinxref we will add:
- Localised descriptions of each package
- “groups” and “systems” information (explained below)
One of the first things “dm” should do when it’s run is to check for an updated version of the pd2 database and download it.
Groups and Systems
Groups and Systems provide a way of grouping collections of packages together to make it easier for the user to choose and install the packages they need.
- Groups are collections of packages, assembled by theme eg. “web_services” or “perl_and_libraries”
- Systems are collections of packages, forming complete special-purpose Darwin distributions eg. “full_desktop”, “rescue_tools”, “office_server”, “web_server”
Group and Systems names should never be the same as package names.
The “core” group
There should be a special “core” group which contains all of the components every PureDarwin installation needs (eg. the kernel(s), launchd, general .KEXTs, the main frameworks). This should always be installed, and cannot be un-installed, but can be updated.
The “core” group could include all of the packages needed to create a network connection and run “dm”. We could then make the first stage of the installation process preparing the destination disk and installing the “core” group, with the second part being running “dm” from the destination disk. (This would allow us to provide multiple first stages – eg. install from LiveCD, Linux, Windows – with a single common second stage).
The “core” group would probably be written directly to the destination disk and not installed via darwinup.
Updates
“dm” will have an --update mode (possibly scheduled via launchd) which will check for updated versions of the installed packages.
Now, here we have a problem, since by default the binary roots we will be using don’t include any version information in their files names. That said, it is very rare for the MacOSForge roots to be updated, and if need be we could add version information to the roots held by PureDarwin.
Update information will have to be dated. “dm” will keep track of when it last checked for updates. It will collect a list of all packages updated since that time, check which of those it has installed, and download these updates.
“dm” should also be also be able to update itself, via several ways (itself, macports, darwinbuild, etc.. at least it should be symetric to the installation ways and perhaps more).
Security
Different “security” mechanisms could/should be provided, feel free to add and/or strike them:
- Checksuming (md5, sha-1, sha-2 family, etc..) itself and packages for from integrity to security purposes.
- If something is remotely retrieved, we should have the possibility (by default that would be nice) to establish a “secure” (many possible ways too..) connection.
- If “dm” is aware of the resident binaries deployed in the system, checksum could also be possible against them (but it could take some resource, and this kind of process could be moved into a “spotlight-like” daemon).
Language
“dm” will need to be written in a language which allows the invocation of external commands (darwinup, curl), the processing (regex) and storage of text (the output from darwinup) and database access (pd2). If “dm” is going to be included in the “core” group then so will its support libraries/interpretter. A scripting language seems like the best option.
Mini poll:
- Stuart suggests Perl: “but I’m fairly flexible on this point. (Unlike Python and indentations.)”
- Aladin suggests to not reinvent the wheel and enhance the MacPorts project in patching `port’ and creating special portfile for our needs. Stuart will look into this.
- Alternatively,
#!/bin/shor Lua (this one is not in the “core” group).
Usage
So, could it be also possible that “dm” is a patch of `port’ command (from the MacPorts project) which extends its functionalities to our needs because a lot of things and good features are already inside. We will provide some specific ports too. We could ask exactly the same for a tweaked darwinbuild which points to root. Also in the installation process, a lot of packages are for “user-land” and comes from darwinbuild (and/or macports) at this time.
```–info { package | group | system }`
--list { installed | available }
--get [config_setting]
--set config_setting value
--add [options] package_list
--remove [options] package_list
--update
--info displays information about the given package, group or system – whether it is currently installed, where it can be found, version, dependencies, and in the case of groups and systems, which packages they contain.
--list without an argument lists all installed packages. With “available” option, list all packages in the package database.
--get without an argument lists the current values of all all config_settings (which will have default built-in values, values stored in /etc/dm.config, and can be over-ridden by the [options] flags to --add and --remove). If config_setting is provided, the settings for just that setting are displayed.
--set sets the value of a particular config_setting (after checking that it’s valid) and stores it in /etc/dm.config.
--add adds the packages in package_list to the current Darwin install.
--remove removes the packages in package_list from the current Darwin install.
package_list
is a list of space-separated package, group and system names. If an entry contains a “.” or a “/” it is treated as a path to a file, which is read. It is expected to contain a list of package, group or system names, which are then added to the package_list. This will allow custom configurations to be built and used time and again. eg.
perl python ruby will add the curl, perl, python and ruby packages –add recovery_tools file_servers emacs will add the emacs package, all packages from the file_servers group, and all packages from the recovery_tools system –add Chess packages.txt will add the Chess package, and any packages, groups or systems listed in packages.txt
options
over-ride the defaults stored in /etc/dm.config for the duration of the single command. (This is not a complete list.)
- –dependencies { YES | NO } – The dependencies
config_setting. By default this is YES, meaning that for every package added its dependencies are found and added at the same time. (I’m not really sure about how we handle removing dependencies. Either we store some form of reference count for packages, or we re-check dependencies at the time. Either way, we should stop the user from removing a package which other packages depend on.) - –cache directory_path – The cache
config_setting. This is checked for packages before remote repositories. This will allow installation from CD images without needing networking. - –temp directory_path – The temp
config_setting. This is where packages are downloaded to. It is also checked for packages before remote repositories.
--update fetches a list of package changes since the last update and compares it to the list of installed packages. It then downloads those packages which have changed and installs them.
At Installation Time
An interactive installer will present the user with lists of systems, groups or packages for them to choose from. Their choices will then be passed to “dm”, which will resolve dependencies, download the packages, and install them.
Package Database Admin Toold
dbtool.zip below contains a couple of simple Perl scripts, described below. These are a first attempt at producing some tools for creating and managing the package database. These are intended to be used by the packaging system admins, not by the end user. They mostly work on plain text files, so it should be possible to keep all of the associated resources (package lists, language files, core, group and system lists) under revision control and automate the process of producing the package database. Please also note that at this point I see the “dm” tool more as a binary installer than a fully-fledged package manager.
dbaudit
dbaudit does a brute-force audit of a darwinbuild environment, finding which packages have binary roots and attempting to calculate dependencies for those that do.
The output package list is a simple text file with one line per package found. Each line has the format: PackageName Y build version { dependency1 dependency2 … dependencyN } Where “Y” could also be “N” and signals that a binary root was found. If no root was found, no version or dependency information will be provided. Dependencies are listed as package names, if resolved, or the full path of linked library paths otherwise.
dbstats
dbstats produces a simple summary of the dbaudit output file. The information in this file may go towards providing the dependency information needed by a Darwin package manager.
package_list.zip contains the package list which dbaudit produced for a 9G55pd1 install of darwinbuild. It shows:
423 packages, 79 missing binary roots, 79 unresolved dependencies
(The two 79s are purely coincidental and unrelated, I think.)
pdpdmake
pdpdmake takes a number of input files and either creates or updates a SQLite database file according to their contents.
As a minimum, at least one package list must be provided.
dtbi
dtbi (Darwin Trivial Binary Installer) is a Perl prototype of a basic installer for Darwin. It’s main purpose is to generate discussion. Currently it will query a pdpd database (there’s one produced from the packages_list.txt file below provided as an example) for information about packages. If darwinup is installed, dtbi will query it for a list of installed packages. It will add a new package, plus any uninstalled packages which that package depends upon, downloading the binary from MacOSForge.
To try dtbi in PureDarwinXmas:
- Install the CPAN package (Perl modules, needed for database access).
- Install
curl(if you want to try installing packages). - Install
darwinup(fromdarwinbuild) into /usr/sbin/ (we can argue about where it should go later). - Copy
dtbiand the db database file into the same directory (/Users/Shared/ is nice).
Currently, only the --info, --list and --add options have been implemented. Again, this is just a quick Perl prototype to get people talking and to see if this solves a problem for us. The fact that this version requires 10+Mb of Perl modules suggests we’ll actually be using a different language for the production version.
Your comments below or in #puredarwin, please.
The Installer
This page is a “request for comments” related to the general installation process. Please feel free to contribute and comment. Through the general install process the installer should be able to also install itself.
The Installation Process
Installing PureDarwin should be a two stage process, as illustrated here.
First stage
The first stage installer is run from either a PureDarwin CD image, or from another operating system on the target computer. The first stage should:
- Partition the target disk, if desired.
- Format the target partition.
- Install the PureDarwin Core package. This will provide all of the utilities and services necessary to allow the second stage installer to complete successfully.
- Install the appropriate bootloaders (/usr/standalone/i386 -> install bootloader into MBR (beginning of disk), boot sector (beginning of partition), grub and HFS startup file (alternatively /boot)), according to user choice and whether it will be a multi-boot system. The user will have the choice of MBR (Chameleon) or EFI. The question should be “Is this a Mac or VMware Fusion?” If they answer “yes”, install the EFI bootloader; if they answer “no”, install MBR.
- Reboot the system when done.
**
Pre-configuration and questions
The user will be asked a quick list of questions. The question must always have a default answer available and “compatible” with all others answers of previous and next questions.
-
Interactive mode (advanced) Questions, questions and questions…
-
Semi interactive mode
-
Non interactive mode (full) MODE=1
-
Non interactive mode (automatic) MODE=0 When the second stage installer runs, it should check for the presence of a configuration file in a specific location. If it finds it, it should read all settings from here and complete the installation without asking the user any more question. If this file isn’t found then it should continue with the standard interactive installation. If not all settings has been provided in the present file, it should continue filling with the default value or (alternatively jump into interactive mode. Caution about this fact, because if “the user” explicitly has chosen “non interactive mode”, it is not to fall into interactive mode because 1 settings is missing in the file).
“Non-interactive mode” will require the user (eg. system admin) to do some extra work. The installer should always automatically attempt to copy non-interactive configuration files from a set location on the boot CD (eg. in /Library/Install/ ) to the target disk. In order to make use of this facility, a boot CD with files in this location should be specially prepared. We can make a root of the install CD, along with the pd_makedmg script, available for download for exactly this purpose.
** Grouping in categories and sub-categories the sequences of questions seems common.
This leads us to another possibilities, we could also target a type of PureDarwin release installed (e.g., nano, dev, rescue, test/bench, etc..).
** Notes: We can’t depend on what admin tools are loaded onto the target (having the core system ship without eg. the DSTools package), so user records should be created by generating the data files (a la pd_injectuser) rather than via tools (pd_adduser).
Preparation of destination media
Partitioning the destination disk, formatting, installing bootloader. This stage could also see the installation of the kernel(s) and a core system so that the rest of the install process could run from the destination, as outlined above.
Notes: We need to know from where we can put and provide the installation materials and to where the PureDarwin project will be installed. e.g., disk, but we have also: iso and VMware, qemu and other democratised emulation/simulation/virtualisation solution.
First Stage Installer Script
An installer script will be needed to guide the user through the first stage installation. A rough idea of how this would work (using the Chameleon bootloader components replacing the standard Darwin ones in /usr/standalone/i386/) is:
Show the user a list of attached drives and ask them to choose one.
Show the user a list of partitions on the chosen drive, and ask them to choose one or enter the fdisk interactive partitioner.
If the user chose to partition the disk, restart the system so that the changes take effect.
Once the user has chosen a disk (number = $disk) and partition (number = $part) to install on, we can ask them for a volume name ($name) to give it, and then without further interaction:
newfs_hfs -s -J -v [$name] /dev/rdisk[$disk]s[$part]dd if=/usr/standalone/i386/boot1h of=/dev/rdisk[$disk]s[$part]mount -t hfs /dev/disk[$disk]s[$part] /tmpcp /usr/standalone/i386/boot /tmp/(for MBR)tar xfz /usr/standalone/PureDarwinCore.root.tar.gz -C /tmp/umount /tmpecho 'Remove CD-ROM...'shutdown -r nowAnd we’re on to the second stage install.
__ __
Correctly setting up bootloaders is a tricky business, especially in a multi-boot environment. One of the advantages of this two stage approach is that the user will find out if the system can successfully boot into Darwin before spending time installing (potentially involving lengthy downloads) all the packages needed by a complete system.
**Comment: **See the boot page for setting up the bootloader
Second stage
The second stage installer will be designed to run in a Darwin environment, meaning that it will be exactly the same no matter what the first stage installer was.
In this way we will be moving the environment-specific parts of setup into the first stage (of which there will be a few different platform-specific versions), consequently we only need to maintain a single version of the main installation code. It will possibly need access to a network connection, although providing a local cache of packages will make this unnecessary.
“PureDarwin Core” is basically (in minimal PureDarwin installation which automatically runs a setup and install script at boot) allowing the user to add extra packages to. It should be possible for the user to chose not to install anything an be left with a working, bare-bones system.
(“PureDarwin Boot” above is a fictional version of Nano equipped with the extra packages needed to run pd_setup)
Copying across and installing packages
This is covered on the Package management page.
Post-configuration
This will include adding users (a default one is provided if no user account has been created) to the system and some settings.
The choices (configuring details such as the system timezone, preferred language, keyboard layouts, etc…) made by the user at the “pre-configuration” phase let the installation to be finish without the user waiting around..
A final question could be (or not) to fall into a shell or to reboot (on timeout too).
The world of bootstrapping
This page gives an overview over some basic concepts about booting operating systems. It is based on a conversation with dfe in #puredarwin.
Linux
Linux needs two files to boot. A kernel, and an initrd any time you upgrade your kernel you’ve got to build a new initrd to go with it which pulls needed drivers off the filesystem as is and puts them into the initrd now in Linux’s case you’re typically not going to be adding a driver needed at boot time to the filesystem after the fact but in the case of Windows or OS X you’ll have a lot of third-party drivers which the user might want to install at any time therefore the bootloader must be able to read all of those drivers which means the bootloader must be able to read the root filesystem which the bootloader will do using BIOS calls to read sectors and its own code to read the filesystem
Windows NTLDR
NTLDR does basically the same thing the boot sector knows barely enough to get NTLDR loaded, just like boot1 knows barely enough to get boot (a.k.a. boot2) loaded once there, the second-stage bootloader (be it NTLDR or boot) has enough code to read the filesystem and locate the kernel and drivers in NTLDR’s case it even has enough code to read a registry hive which tells it which drivers to load rather than simply loading any drivers that might be needed for boot which is also why windows won’t boot if you move the hard drive to a different system. The system registry hive only says to load say the 440bx HD controller driver, not the ICH-7 driver or the VIA driver or whatever that’s part of the reason why EFI is such a big deal.
EFI
With EFI you’ve got a decent 32-bit callable interface to read sectors from the hard drive plus you’re guaranteed to be able to read FAT32 plus you can supply drivers for other filesystems so it enables you to write bootloaders that can read quite a bit, certainly enough to get all the individual drivers loaded Now take something like GRUB for instance. GRUB is actually advanced enough that it code theoretically load a vmlinuz and a number of .ko files to get the system loaded. But which .ko files would it load? if you look on a macbook you’ll note that everything you need to boot is in ROM there’s hardly anything in the EFI partition well there never was anything on the service partition because Apple has enough in the firmware that it doesn’t need the service partition but that’s because Apple wants to explicitly support booting of OS X which is an addition to the EFI spec and to boot from CD apple may have used the EFI El Torito spec to load enough to get the HFS+ driver and boot.efi loaded then boot.efi could take over as per usual yeah, take the linux case for instance assume you had everything to do from scratch and there was no legacy of initrds what you would probably do is write an ext2/3 driver for EFI and you might then have a bootloader which looked for a config file to tell it which kernel and set of drivers to load yeah, if OS X was made to run on generic PCs then the CD might have a custom loader that was just good enough to load an HFS+ driver and the real second-stage booter (boot.efi) notice how nothing really changes from x86 boot here. You still have the situation of a first stage loader good enough to load the second stage loader which is good enough to load the OS welcome to the world of bootstrapping
Multiboot
multiboot is an open specification designed to allow you to boot a kernel straight into protected mode for it to have any chance of working you’ve either got to have enough in the kernel itself to be able to root or you’ve got to supply modules to the kernel the multiboot spec can supply modules to the kernel though but again you wind up in a similar situation. Now part of your bootstrapping code is sort of in the kernel at least it has to have enough code to know how to link in the additional modules because let’s face it, at some point you need to root a filesystem there’s no getting around that typically multiboot is used primarily for toy operating systems yes, multiboot doesn’t really give you a whole lot basically all it does is say that your kernel and some number of additional files will have been loaded by the bootloader basically all it does is say that your kernel and some number of additional files will have been loaded by the bootloader and then the bootloader will jump into your code which will start in protected mode
Modified boot-132 to run as multiboot kernel
kernel being boot-132 in our special case well the reason for multiboot in boot-132 is to avoid having to replace the startup file to develop it and boot-132 uses multiboot in a rather queer way basically there’s an alternative entrypoint coming from the multiboot bootloader that entrypoint sets up enough to get a stack and whatnot and from there runs the bootloader as per usual i.e. it still thunks into real-mode to make BIOS calls Q: So in a nutshell, it’s BIOS/EFI -> (GRUB) and/or boot1 (our “kernel” for argument’s sake) -> boot2 -> xnu (our “real” kernel)? when using multiboot there is no boot1 GRUB boots boot(2) directly that is the point of it the reason being that 512 bytes for boot1h is barely enough to find the HFS+ startupfile and load it now it’s really the case that you’re guaranteed to have 1024 bytes available which as we’ve seen is actually enough to read some of the HFS+ directory structure and find a file in the root but even then the 1024-byte is really not enough to do it right
Network booting
Q: from a server’s perspective the i386 network boot mechanisms are all the same?
yeah, just provide an IP via DHCP and files via TFTP
PXE
PXE is an x86 thing it does use TFTP like basically everything else out there to grab the kernel and modules (extensions) though actually bootstrapping over the network is interesting regardless of platform this is basically how it is supposed to go down DHCP or BootP so the firmware can get itself an IP address TFTP to actually grab the bootloader which depending on system might be a first-stage loader (PXE tends to require this) or might be THE loader PXE tends to require it primarily because PXE spec says to only force the firmware to load 32k so 32k is usually only enough to get your own code in place that can load the larger real booter either way you’ll eventually get the real (second-stage) booter loaded
BootX (PPC)
for PPC that’d be BootX so BootX itself would be loaded by OpenFirmware from there BootX will make open firmware calls to load more files from tftp, including the kernel and hopefully the Extensions.mkext package
Netboot (PPC)
although PPC Macs have the whole netboot spec too which is some more stuff on top of TFTP/DHCP
there is a command to do a netboot in openfirmware typically just hold down N
Windows
ditto for Windows NT, it has a special server program there’s actually a server program that tells the client which drivers it needs the Windows PXE client enumerates PCI devices and sends that info to this special server the special server responds back and tells it which drivers it needs to download via TFTP
General
the thing is that this kinda goes back to what I was talking about earlier on having to know which drivers to load there’s different ways to accomplish it Windows actually has a client/server thing to do this and the client side tells the server about the hardware and the server then does the hard work of sifting through the INF files to determine which SYS files to load a typical Linux setup uses an initrd for something like Fedora the initrd intended for PXE boot will basically contain any driver (.ko) that might possibly be needed to root locally or over the network for OS X it’s similar except that instead of an initrd you have an Extensions.mkext
Universal binaries
Mac OS X and Darwin can use so-called Mach-O (Mach Object) “fat” files, or universal binaries that contain code for more than one architecture, e.g., ppc and i386. PureDarwin, however, currently uses i386 only (also referred to as “x86”) but hopes to use x86_64 a day and future architectures.
Finding and removing files that have no i386 code
The command-line tool lipo can be used to inspect and modify the architecture-related aspects of executable files and libraries.
To find ppc-only files, you can use
find /some/path -exec lipo -i {} 2>&1 ; | grep ppc | grep -v i386
Since the PureDarwin project currently supports only the i386 platform, you should be able to safely delete files found by the command above.
Example
The old UNIX file command is also useful to determine fat file types.
file /usr/lib/libedit.2.dylib
/usr/lib/libedit.2.dylib: Mach-O universal binary with 4 architectures
/usr/lib/libedit.2.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc
/usr/lib/libedit.2.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64
/usr/lib/libedit.2.dylib (for architecture i386): Mach-O dynamically linked shared library i386
/usr/lib/libedit.2.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
Then we use lipo. Compare the size before thin (565K) and after (128K).
Mach
From /usr/share/file/magic:
# mach file description
#
# Since Java bytecode and Mach-O universal binaries have the same magic number the test
# must be preformed in the same "magic" sequence to get both right. The long
# at offset 4 in a universal binary tells the number of architectures. The short at
# offset 4 in a Java bytecode file is the compiler minor version and the
# short at offset 6 is the compiler major version. Since there are only
# only 18 labeled Mach-O architectures at current, and the first released
# Java class format was version 43.0, we can safely choose any number
# between 18 and 39 to test the number of architectures against
# (and use as a hack).
[...]
0 belong&0xfffffffe 0xfeedface Mach-O
[...]
What is Mach-o?
- A file format
- An ABI (Application Binary Interface)
Where does it come from?
OSF (Open Software Foundation) for mach kernel.
What does it specify?
- Processus address space
- Dynamic loader to use
- Shared library to load
Structure
+–––––––––––––––––––––––––––––––––––––+ | ** Header | | ** | +–––––––––––––––––––––––––––––––––––––+ | ** Load commands |
| ** |
|---|
| Segment command 1 |
| Segment command 2 |
| ——————— |
| +–––––––––––––––––––––––––––––––––––––+ |
| ** Raw data |
| ** |
| +–––––––––––––––––––+–––––––––––––––– |
| ——+ |
| +–––––––––––––––––––+–––––––––––––––– |
| ——+ |
| +–––––––––––––––––––+–––––––––––––––– |
| ——+ |
| +–––––––––––––––––––––––––––––––––––––+ |
References
http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachOTopics/introduction.html http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html
http://en.wikipedia.org/wiki/Mach-O
http://en.wikipedia.org/wiki/Universal_Binaries
man otool
man dyld
man Mach-o
Using DarwinBuild
The DarwinBuild project provides an integrated build environment for Darwin projects. There are many reasons why you should use DarwinBuild and although some parts of Darwin can be built without DarwinBuild, it is easier with it. This page describes some ways to use DarwinBuild in order to build Darwin projects. It is a work in progress. Please post your comments below or edit this wiki page.
Prerequisites
Have a look at (to be determined)
- A Mac with the latest Xcode installed (whether it needs to be an Intel Mac and whether it needs to be (Snow) Leopard is still to be determined). (Some projects require Xcode and hence a Mac OS X system to build: those do not use a makefile, but instead a .pbproj or .xcode project file. It is unclear at this time whether the requirement for a Mac with Xcode could also be satisfied using just Darwin and the Xcode sources.
- Subversion available (Leopard comes with it, otherwise use the binaries from fink or compile sources from the MacPorts project)
- Some coffee
If you are using svn from fink, you need to put it in your path by
PATH=/sw/bin:$PATH # If you are using svn from fink
In case you use MacPorts, your path should already and probably be set to
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
Terminology
Since the terminology used by DarwinBuild and PureDarwin is slightly different from what you might know from Linux, it makes sense to look at some commonly used terms now.
Project
Upstream project’s source code; .orig.tar.gz
Example
bash (as a project not command)
Comments
Most of Apple’s own projects are under the APSL, other upstream open source projects have been converted to DarwinBuild projects and are under the respective project’s sources
xref database
Database of the package manager
Example
dpkg, rpm
Comments
The xref database has (so far) only been used during the build process, but not as a package manager for a running Darwin system. Like package manager databases, the xref database knows about build-time and run-time dependencies
Roots
binary roots
Example
Binary packages (.deb, .rpm)
Comments
Binary roots that contain code for all architectures (“universal/fat binaries”) are packed as .tar.gz files, whereas binary roots that contain code for just one architecture (“stripped”, e.g., i386) are usually packed as .tar.bz2 files
BinaryDrivers
Closed-source binary packages
Example
AppleRTC
Comments
As of May 2008, 6 projects are released by Apple in binary-only form.
Development on macosforge’s darwinbuild seem stopped on github, and subversion repository seems to be offline. Use the git repo bellow for now.
Installation
From Git
git clone https://github.com/PureDarwin/darwinbuild.git
Generic Instructions (after getting darwinbuild source)
Change directory to ensure you are in darwinbuild (if not already)
cd darwinbuild
xcodebuild install DSTROOT=/
A fresh darwinbuild folder is now present: “/usr/local/share/darwinbuild”.
From MacPorts
Simply run:
% port install darwinbuild
Output:
---> Computing dependencies for darwinbuild
---> Fetching darwinbuild
---> Verifying checksum(s) for darwinbuild
---> Extracting darwinbuild
---> Configuring darwinbuild
---> Building darwinbuild
---> Staging darwinbuild into destroot
---> Installing darwinbuild @0.8.0_508
---> Activating darwinbuild @0.8.0_508
---> Cleaning darwinbuild
In order to upgrade to the latest revision of trunk:
% port selfupdate
% port -f upgrade darwinbuild
Initialize Darwinbuild
Some part of the environment
The BuildRoot directory
This place could also be called the BuildChroot directory, everything fetch or built by darwinbuild will reside inside this directory.
Notes: The build version “9J61” (2009/05) used below is just an example.
(At the time of this writing, 9F33pd1.plist and 9G55pd1.plist are recommended, as it includes PureDarwin-specific patches. You can get them from the PureDarwin repository.)
Create and select a BuildRoot location hierarchy in the current working directory:
cd //darwinbuild
mkdir 9J61
cd 9J61
The DarwinBuild ticket#1 workaround (DarwinBuild inherits a bug from Xcode that makes it impossible to use it on a HFS+ volume, the workaround(s) involve(s) setting up NFS locally or using an UFS disk image) is no longer needed since on the Darwinbuild website, we can read (news from 2009/04/17): “The latest revision of trunk has support for sparsebundles and NFS Loopback in order to avoid the problems with xcodebuild inside of chroots. If you do not change the way you use darwinbuild, you will start seeing the sparsebundle storage. Nothing else is needed and Xcode-based projects will build on whatever filesystem you have.”
darwinbuild -init 9J61 -nfs
If you want to avoid the use of NFS, the old fashioned method is still available with: darwinbuild -init 9J61 -nodmg The command above should download the .plist files (it will run nfsd if it is not yet the case and will mount the build root over NFS loopback when a project will be built) from the darwinbuild website and give:
Adding build root to NFS exports file ...
nfsd: nfsd not running?
Checking exports file ...
Downloading http://svn.macosforge.org/repository/darwinbuild/trunk/plists//9J61.plist ...
Download complete
Downloading http://svn.macosforge.org/repository/darwinbuild/trunk/plists//9G55.plist ...
Download complete
Downloading http://svn.macosforge.org/repository/darwinbuild/trunk/plists//9F33.plist ...
Download complete
Downloading http://svn.macosforge.org/repository/darwinbuild/trunk/plists//9E17.plist ...
Download complete
Downloading http://svn.macosforge.org/repository/darwinbuild/trunk/plists//9D34.plist ...
Download complete
Downloading http://svn.macosforge.org/repository/darwinbuild/trunk/plists//9C31.plist ...
Download complete
Downloading http://svn.macosforge.org/repository/darwinbuild/trunk/plists//9B18.plist ...
Download complete
Downloading http://svn.macosforge.org/repository/darwinbuild/trunk/plists//9A581.plist ...
Download complete
Initialization Complete
If you get “.build/9F33.plist: No such file or directory”, it can be necessary to repeat this step. As a result, you should now have inside the current working directory:
./.build
./.build/9A581.plist
./.build/9B18.plist
./.build/9C31.plist
./.build/9D34.plist
./.build/9E17.plist
./.build/9F33.plist
./.build/9G55.plist
./.build/9J61.plist
./.build/build
./.build/buildroot.nfs
./.build/xref.db
./Headers
./Logs
./Roots
./Sources
./Symbols
Whenever there are new Darwin projects or versions, you should do darwinbuild -init again in order to refresh the .plist files (think of it as “apt-get update” for Darwin source projects). Notes: Keep in mind that/etc/exports must be cleaned sometimes, since there is no concept of “uninitializing” (implicitly removing the added line from /etc/exports). An example of what is added:
# Added by darwinbuild on 20090523154428
/Users/aladin/PureDarwin/darwinbuild/9J61/.build/buildroot.nfs -maproot=0:10
Take a look at http://darwinbuild.macosforge.org/trac/ticket/86 if your /etc/exports grows to fast.
Logs folder
Later on, if a project fails to build (and depending your tty), you will want to look into the entire history of build logs.
So simply look into the Logs/<project>/<project>-<version>~<build attempts> folder for a detailled compilation loh. In this case the “CommonCrypto” project has been successfully built at the first attempt and its log can be found in […]/9J61/Logs/CommonCrypto/CommonCrypto-32207.log~1.
The entire content cannot be pasted here, but most the time, the end crowns with:
[...]
** BUILD SUCCEEDED **
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BUILD TIME: Xh Ym Zs
EXIT STATUS: 0
With a project which has failed to build, the end can looks like:
[...]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BUILD TIME: 0h 0m 0s
EXIT STATUS: 2
Building projects
Before building a project, it is mandatory to initialize again (refresh) the darwinbuild environment. Same apply if the initialized darwinbuild shell session has been closed. After running darwinbuild -init ..., the output should look like for:
$ darwinbuild -init 9J61
> > Creating build root disk image ...
> > Found 9J61.plist in .build
> > Found 9G55.plist in .build
> > Found 9F33.plist in .build
> > Found 9E17.plist in .build
> > Found 9D34.plist in .build
> > Found 9C31.plist in .build
> > Found 9B18.plist in .build
> > Found 9A581.plist in .build
> > Initialization Complete
$ darwinbuild -init 9J61 -nfs
> > Adding build root to NFS exports file ...
> > Checking exports file ...
> > Found 9J61.plist in .build
> > Found 9G55.plist in .build
> > Found 9F33.plist in .build
> > Found 9E17.plist in .build
> > Found 9D34.plist in .build
> > Found 9C31.plist in .build
> > Found 9B18.plist in .build
> > Found 9A581.plist in .build
> > Initialization Complete
Ideally, one could transfer the contents of the BuildRoot to a volume, bless it, and boot a fully working Darwin system from it. In fact, it’s not so simple. Whenever you build something using DarwinBuild and don’t specifiy otherwise (using -nochroot), you will be building inside a chrooted environment using the DarwinBuild directory. Consequently, your build results, hence, will be “built on Darwin” as opposed to “built on Mac OS X”. If during the process of downloading you get errors like “ERROR: could not find root: AppleUSBIrDA”, this simply means that a binary root of the respective project has not been uploaded to the DarwinBuild server yet. (Perhaps it does not build correctly with DarwinBuild yet.) The file xref.db contains the Darwin xref database. It keeps track of the Darwin projects installed in your BuildRoot and their files and version numbers (think of xref roughly as a package manager like “apt” for Darwin binary roots). The xref database has been filled by the darwinbuild -load command, and will be updated whenever you build something with DarwinBuild.
CoreFoundation as a first test case
To build a specific package, e.g., CF, type:
$ darwinbuild CF
CF is a test case to build. On the first build in the new BuildRoot, DarwinBuild will do some initializations, e.g., copy some header files from the host OS. If it fails, then some prerequisites might be missing or you might need to use -nochroot (in case not all prerequisites are uploaded to DarwinBuild yet; this would then use the files from the currently running OS rather than from DarwinBuild). If the build succeeds, you should see a Roots/CF/CF-476.10.root~1 directory containing the files you just built.
xnu
A classic test case is xnu, the kernel. The command below will fetch and build the xnu project. Before that step, some binaryroots (dependencies of the xnu project. as e.g., libgcc, dylib, developer_cmds, etc..) will be downloaded and loaded into the BuildRoot.
$ darwinbuild xnu
If the build succeeds, you can see a xnu/xnu-1228.12.14.root~1 directory containing the built project. The ~1 stands for the number of time the project has been built. Then, in order to populate the BuildRoot dir with the freshly built project:
$ darwinbuild -load xnu
Copying xnu from /Volumes/Builds/9J61/Roots/xnu/xnu-1228.12.14.root~1 ...
xnu - 2640 files registered.
/XCD/loper
You might come across a warning that /XCD/loper is missing. Inside BuildRoot, there should be a directory called XCD/ which contains Xcode and its dependencies (e.g., Xcode requires a proper CoreFoundation, not CF-Lite). Anything under XCD should only link or refer to any other thing in XCD in order to “keep away” Xcode dependencies. If not, there’s something wrong. The contents of XCD/ are copied there from the host system by DarwinBuild’s installXcode. This can be invoked manually as well:
/usr/local/share/darwinbuild/installXcode /Developer/darwinbuild/9C31/BuildRoot/ Analyzing Xcode dependencies … Copying Xcode and dependencies …
More cool stuff DarwinBuild can do
These need to be documented here
- buildorder.pl
- ditto.sh
- log-index.pl
- packageRoots.sh
- thinFile.sh
- buildlist.sh
- createChroot
- darwinmaster.sh
- installXcodebuild
- manifest
- processtrace.sh
- thinPackages.sh
darwinxref
Listing all the projects for a given branch
darwinxref -b 9G55 version '*'
Searching the project of a given file
darwinxref findFile launchctl
launchd:
/bin/launchctl
Building all the projects (brutus way)
for X in $(darwinxref version '*' | cut -f 1 -d '-'); do darwinbuild $X; done
Note: Of course, this doesn’t mean all the projects will be compiled.
Package the built binaries
Time to package them up!
{DarwinBuild_Checkout_Dir}/packageRoots.sh
Archive tool: tar (GNU tar) 1.14
*** Packaging Headers
*** Packaging Roots
{DarwinBuild_Checkout_Dir} is your working copy from SVN of DarwinBuild. If you followed the article as suggested at the beginning, it must be located in /Developer/darwinbuild/trunk/darwinbuild/.
We now have a nice Darwin binary root archive in the Packages/ directory:
ls Packages/
CF.root.tar.gz
Why doesn’t it have a version number?
Resources
Deprecated
Workaround DarwinBuild ticket #1 (no longer needed)
The DarwinBuild ticket#1 workaround is no longer needed since on the Darwinbuild website, we can read (news from 2009/04/17): “The latest revision of trunk has support for sparsebundles and NFS Loopback in order to avoid the problems with xcodebuild inside of chroots. If you do not change the way you use darwinbuild, you will start seeing the sparsebundle storage. Nothing else is needed and Xcode-based projects will build on whatever filesystem you have.” Since DarwinBuild currently inherits a bug from Xcode that makes it impossible to use it on a HFS+ volume, we are going to use a workaround that involves setting up NFS locally.
sudo su
cat >> /etc/exports <<EOF
/Developer -maproot=root localhost
EOF
nfsd restart
sleep 20
mkdir /DeveloNFS
mount -t nfs localhost:/Developer /DeveloNFS
You should use /DeveloNFS for your DarwinBuild-related work, then you should not encounter DarwinBuild ticket #1. Notes: Using an UFS disk image (a bit deprecated though) is another possible alternative not described here.
Populate BuildRoot (no longer needed)
Populating the BuildRoot directory via the way below is no longer needed because the dependencies of a project are automatically retrieved and loaded in the BuildRoot. Theoretically you could begin building projects with DarwinBuild now. However, this would mean that you would have to build binaries using your host Mac OS X as the build environment (using -nochroot). This would clearly not be ideal, since the resulting binaries would not be guaranteed to run on Darwin. Hence, we want to build Darwin projects using Darwin itself as the build environment (“self-hosted”). To do this, we use a chroot environment which resides in the BuildRoot directory. We can fill this BuildRoot with all available Darwin binaries using the following command:
for X in `darwinxref version '*'` ; do darwinbuild -load ${X/-*/} ; done
This downloads any Darwin components that are available in pre-compiled form (called “binary roots”) to Roots/.DownloadCache and installs them into our BuildRoot directory. Since it downloads all available binary roots, it is obviously going to take some time, even on a fast Internet connection. The result is an almost-complete Darwin system inside the BuildRoot directory.
- May 27, 2008, a 9C31 Roots/.DownloadCache populated in this way was 714M in size, and the BuildRoot consisted of about 69,000 files taking up 2.21 GB of space.
- September 29, 2008, a 9F33 Roots/.DownloadCache populated was 811M. The BuildRoot took around 2.6GB of disk space.
- February 12, 2009, a 9G55 Roots/.DownloadCache is still at 811M. And the BuildRoot is taking 4.5G of space.
- May 25, 2009, a 9J61/ seems to need more than 11G (related to svk infinite loop) and fools nicely (4Ti !!!) `df’ available space: /dev/disk1s2 11Gi 11Gi 4.0Ti 1% /Volumes/Builds
- As of June 13, 2009, situation fixed and more than the half of the projects are built and packaged.
Help and further reading
The DarwinBuild Project Archives (darwinbuild-dev mailing list at lists.macosforge.org)
Credits
Credits go to kvv and _wms for their work on DarwinBuild and for their excellent online support. This page was started by probono in the spirit of the DarwinBuild newbie guide by Craig Harman, but specifically covers Darwin versions starting with 9.
DarwinBuild troubleshooting
The subpages available below represents collections of troubleshooting regarding some Darwin projects that are built with DarwinBuild. Most of fixes and workaround tends to be deprecated with time and BuildVersion number grow. And yes, you can sometimes use these pages as an entropy generator, the chaos leads here.
Darwin 10
… 10C540 status
No dependency problem and half of the projects can be build without any patches. Some projects in the list below also have been volontary not built but build, including:
BerkeleyDB MySQL bind9 cups_libs gcc_select libtelnet passwordserver_saslkerberos passwordserver_saslextra
PROJECT BIN SRC PAK PASSES Apple16X50Seri [1](javascript al :void(0); “** BUILD FAILED * ”) AppleAPIC [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) AppleDisplays [1](javascript :void(0); “EXI T STATUS: 2”) AppleFileSyste [1](javascript mDriver :void(0); “ BUILD FAILED * ”) AppleHWSensor [1](javascript :void(0); “* BUILD FAILED * ”) AppleIntelPIIX [1](javascri ATA pt:void(0); “ * BUILD SUCCEE DED ”) AppleKeyswitch [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) AppleRAID [1](javascript :void(0); “ BUILD FAILED * ”) AppleRTL8139Et [1](javascri hernet pt:void(0); “ * BUILD SUCCEE DED ”) AppleSMBIOS [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) AppleTalk [1](javascript :void(0); “EXI T STATUS: 2”) AppleUSBAudio [1](javascript :void(0); “ BUILD FAILED * ”) AppleUSBCDCDri [1](javascript ver :void(0); “ BUILD FAILED * ”) AppleUSBIrDA [1](javascript :void(0); “ BUILD FAILED * ”) BerkeleyDB BootCache [1](javascript :void(0); “* BUILD FAILED * ”) CF [1](javascript :void(0); “EXI T STATUS: 2”) CFOpenDirector [1](javascript y :void(0); “* BUILD FAILED * ”) CPAN [1](javascript :void(0); “EXI T STATUS: 2”) CPANInternal [1](javascript :void(0); “EXI T STATUS: 2”) CarbonHeaders [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) ChatServer [1](javascript :void(0); “ BUILD FAILED * ”) Chess [1](javascript :void(0); “* BUILD FAILED * ”) CommonCrypto [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) CoreOSMakefile [1](javascri s pt:void(0); “ * BUILD SUCCEE DED ”) CrackLib [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Csu [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) CyrusIMAP [1](javascript :void(0); “EXI T STATUS: 2”) DSPasswordServ [1](javascript erFramework :void(0); “ BUILD FAILED * ”) DSPasswordServ [1](javascript erPlugin :void(0); “ BUILD FAILED * ”) DSTools [1](javascript :void(0); “ BUILD FAILED * ”) DirectoryServi [1](javascript ce :void(0); “ BUILD FAILED * ”) DirectoryServi [1](javascript ceDaemon :void(0); “* BUILD FAILED * ”) DirectoryServi [1](javascript ceMIG :void(0); “* BUILD FAILED * ”) DiskArbitratio [1](javascript n :void(0); “* BUILD FAILED * ”) FastCGI [1](javascript :void(0); “EXI T STATUS: 2”) ICU [1](javascript :void(0); “EXI T STATUS: 2”) ICU_debug [1](javascript :void(0); “EXI T STATUS: 2”) ICU_profile [1](javascript :void(0); “EXI T STATUS: 2”) IOACPIFamily [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) IOATAFamily [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) IOATAPIProtoco [1](javascript lTransport :void(0); “ BUILD FAILED * ”) IOAudioFamily [1](javascript :void(0); “ BUILD FAILED * ”) IOBDStorageFam [1](javascript ily :void(0); “* BUILD FAILED * ”) IOCDStorageFam [1](javascript ily :void(0); “* BUILD FAILED * ”) IODVDStorageFa [1](javascript mily :void(0); “* BUILD FAILED * ”) IOFWDVComponen [1](javascript ts :void(0); “* BUILD FAILED * ”) IOFireWireAVC [1](javascript :void(0); “* BUILD FAILED * ”) IOFireWireFami [1](javascript ly :void(0); “* BUILD FAILED * ”) IOFireWireIP [1](javascript :void(0); “* BUILD FAILED * ”) IOFireWireSBP2 [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) IOFireWireSeri [1](javascript alBusProtocolT :void(0); “ ransport BUILD FAILED * ”) IOGraphics [1](javascript :void(0); “* BUILD FAILED * ”) IOHIDFamily [1](javascript :void(0); “* BUILD FAILED * ”) IOKitTools [1](javascript :void(0); “* BUILD FAILED * ”) IOKitUser [1](javascript :void(0); “* BUILD FAILED * ”) IONetworkingFa [1](javascript mily :void(0); “* BUILD FAILED * ”) IOPCIFamily [1](javascript :void(0); “* BUILD FAILED * ”) IOSCSIParallel [1](javascript Family :void(0); “* BUILD FAILED * ”) IOSerialFamily [1](javascript :void(0); “* BUILD FAILED * ”) IOStorageFamil [1](javascript y :void(0); “* BUILD FAILED * ”) IOUSBFamily [1](javascript :void(0); “* BUILD FAILED * ”) IOUSBMassStora [1](javascript geClass :void(0); “* BUILD FAILED * ”) JavaScriptCore [1](javascript :void(0); “* BUILD FAILED * ”) JavaScriptGlue [1](javascript :void(0); “* BUILD FAILED * ”) KerberosHelper [1](javascript :void(0); “* BUILD FAILED * *”) KerberosLibrar [1](javascript ies :void(0); “EXI T STATUS: 2”) LDAPFramework *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libc [1](javascript :void(0); “EXI T STATUS: 2”) Libc_debug [1](javascript :void(0); “EXI T STATUS: 2”) Libc_headers *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libc_man [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libc_profile [1](javascript :void(0); “EXI T STATUS: 2”) Libcpp_kext [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libinfo [1](javascript :void(0); “EXI T STATUS: 2”) Libm [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libmx [1](javascript :void(0); “ BUILD FAILED * ”) Libnotify [1](javascript :void(0); “EXI T STATUS: 2”) Librpcsvc [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libsyscall [1](javascript :void(0); “EXI T STATUS: 2”) Libsystem [1](javascript :void(0); “EXI T STATUS: 2”) Liby [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) MySQL NFS [1](javascript :void(0); “EXI T STATUS: 2”) OpenAL [1](javascript :void(0); “EXI T STATUS: 2”) OpenBSM [1](javascript :void(0); “ BUILD FAILED * ”) OpenDirectory [1](javascript :void(0); “ BUILD FAILED * ”) OpenLDAP [1](javascript :void(0); “EXI T STATUS: 2”) OpenSSH [1](javascript :void(0); “EXI T STATUS: 2”) OpenSSL096 [1](javascript :void(0); “EXI T STATUS: 2”) OpenSSL097 [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) OpenSSL098 [1](javascript :void(0); “ BUILD FAILED * ”) PowerManagemen [1](javascript t :void(0); “ BUILD FAILED * *”) PyRSS2Gen *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) RubyCocoa [1](javascript :void(0); “EXI T STATUS: 2”) RubyGems *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) RubyOnRails *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) SQLite [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) SQLite_tcl [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Security [1](javascript :void(0); “ BUILD FAILED * ”) SecurityTokend [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) SecurityTool [1](javascript :void(0); “ BUILD FAILED * *”) SmartCardServi *[1](javascri ces pt:void(0); “ * BUILD SUCCEE DED ”) SpamAssassin [1](javascript :void(0); “EXI T STATUS: 2”) SquirrelMail [1](javascript :void(0); “EXI T STATUS: 2”) SystemStubs *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) TargetConfig *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) TargetConfig_ *[1](javascri headers pt:void(0); “ * BUILD SUCCEE DED ”) TimeZoneData *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Tokend [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Twisted [1](javascript :void(0); “EXI T STATUS: 2”) UserNotificati [1](javascri on pt:void(0); “ * BUILD SUCCEE DED ”) WebCore [1](javascript :void(0); “ BUILD FAILED * *”) X11apps [1](javascript :void(0); “EXI T STATUS: 2”) X11fonts [1](javascript :void(0); “EXI T STATUS: 2”) X11libs [1](javascript :void(0); “EXI T STATUS: 2”) X11misc [1](javascript :void(0); “EXI T STATUS: 2”) X11proto [1](javascript :void(0); “EXI T STATUS: 2”) X11server [1](javascript :void(0); “EXI T STATUS: 2”) adv_cmds *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) amavisd [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) apache [1](javascript :void(0); “EXI T STATUS: 2”) apache_mod_b [1](javascript onjour :void(0); “EXI T STATUS: 2”) apache_mod_f [1](javascri astcgi pt:void(0); “ * BUILD SUCCEE DED ”) apache_mod_h [1](javascript fs_apple :void(0); “EXI T STATUS: 2”) apache_mod_p [1](javascript erl :void(0); “EXI T STATUS: 2”) apache_mod_p [1](javascript hp :void(0); “EXI T STATUS: 2”) apr [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) architecture [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) autoconf [1](javascript :void(0); “EXI T STATUS: 2”) autofs [1](javascript :void(0); “ BUILD FAILED * ”) automake [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) autozone [1](javascript :void(0); “ BUILD FAILED * ”) awk [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) bash [1](javascript :void(0); “EXI T STATUS: 2”) basic_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) bc [1](javascript :void(0); “EXI T STATUS: 2”) bind9 bison [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) bison1 [1](javascript :void(0); “EXI T STATUS: 2”) bless [1](javascript :void(0); “ BUILD FAILED * ”) bootp [1](javascript :void(0); “ BUILD FAILED * ”) bootstrap_cmd [1](javascri s pt:void(0); “ * BUILD SUCCEE DED ”) bsdmake [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) bzip2 [1](javascript :void(0); “EXI T STATUS: 2”) cctools [1](javascript :void(0); “EXI T STATUS: 2”) cctools_ofile [1](javascript s :void(0); “EXI T STATUS: 2”) cddafs [1](javascript :void(0); “ BUILD FAILED * ”) clamav [1](javascript :void(0); “EXI T STATUS: 2”) configd [1](javascript :void(0); “ BUILD FAILED * ”) configd_execu [1](javascript tables :void(0); “ BUILD FAILED * ”) configd_libSy [1](javascript stem :void(0); “ BUILD FAILED * ”) configd_plugi [1](javascript ns :void(0); “ BUILD FAILED * *”) copyfile [1](javascript :void(0); “EXI T STATUS: 2”) cron [1](javascript :void(0); “EXI T STATUS: 2”) crontabs *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) cscope [1](javascript :void(0); “EXI T STATUS: 2”) cups [1](javascript :void(0); “EXI T STATUS: 2”) cups_libs [1](javascript :void(0); “EXI T STATUS: 2”) curl [1](javascript :void(0); “EXI T STATUS: 2”) cvs [1](javascript :void(0); “EXI T STATUS: 2”) cxxfilt [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) developer_cmd [1](javascri s pt:void(0); “ * BUILD SUCCEE DED ”) diffstat [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) diskdev_cmds [1](javascript :void(0); “EXI T STATUS: 2”) disklabel [1](javascript :void(0); “ BUILD FAILED * ”) distcc [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) doc_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) dtrace [1](javascript :void(0); “ BUILD FAILED * ”) dyld [1](javascript :void(0); “ BUILD FAILED * ”) eap8021x [1](javascript :void(0); “ BUILD FAILED * *”) efax [1](javascript :void(0); “EXI T STATUS: 2”) emacs *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) enscript [1](javascript :void(0); “EXI T STATUS: 2”) expat [1](javascript :void(0); “EXI T STATUS: 2”) fetchmail [1](javascript :void(0); “EXI T STATUS: 2”) file [1](javascript :void(0); “EXI T STATUS: 2”) file_cmds *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) files *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) flex [1](javascript :void(0); “EXI T STATUS: 2”) freeradius [1](javascript :void(0); “EXI T STATUS: 2”) gcc gcc_select gdb [1](javascript :void(0); “EXI T STATUS: 2”) glibtool [1](javascript :void(0); “EXI T STATUS: 2”) gm4 [1](javascript :void(0); “EXI T STATUS: 2”) gnudiff [1](javascript :void(0); “EXI T STATUS: 2”) gnumake [1](javascript :void(0); “EXI T STATUS: 2”) gnuserv [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) gnutar [1](javascript :void(0); “EXI T STATUS: 2”) gnuzip [1](javascript :void(0); “EXI T STATUS: 2”) gperf [1](javascript :void(0); “EXI T STATUS: 2”) gpt [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) graphviz [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) grep [1](javascript :void(0); “EXI T STATUS: 2”) groff [1](javascript :void(0); “EXI T STATUS: 2”) gssd [1](javascript :void(0); “EXI T STATUS: 2”) headerdoc [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) hfs [1](javascript :void(0); “EXI T STATUS: 2”) iodbc [1](javascript :void(0); “EXI T STATUS: 2”) ipsec [1](javascript :void(0); “ BUILD FAILED * ”) ipv6configurat [1](javascri ion pt:void(0); “ * BUILD SUCCEE DED ”) kext_tools [1](javascript :void(0); “ BUILD FAILED * ”) keymgr [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) ksh [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) launchd [1](javascript :void(0); “ BUILD FAILED * ”) launchd_libs [1](javascript :void(0); “ BUILD FAILED * ”) ld64 [1](javascript :void(0); “ BUILD FAILED * ”) less [1](javascript :void(0); “EXI T STATUS: 2”) libdispatch [1](javascript :void(0); “ BUILD FAILED * *”) libdyld *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libedit [1](javascript :void(0); “EXI T STATUS: 2”) libffi *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libfs *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libgcc *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libiconv [1](javascript :void(0); “EXI T STATUS: 2”) libkxld *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libmd [1](javascript :void(0); “EXI T STATUS: 2”) libpcap *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libresolv *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a *[1](javascri gent pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a *[1](javascri pple_csp pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a *[1](javascri pple_cspdl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascri pple_file_dl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascri pple_x509_cl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascri pple_x509_tp pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascript sn1 :void(0); “ BUILD FAILED * ”) libsecurity_a [1](javascript uthorization :void(0); “ BUILD FAILED * *”) libsecurity_c *[1](javascri dsa_client pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascri dsa_plugin pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascri dsa_utilities pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascri dsa_utils pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascri heckpw pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascript ms :void(0); “ BUILD FAILED * ”) libsecurity_c [1](javascript odesigning :void(0); “ BUILD FAILED * ”) libsecurity_c [1](javascri ssm pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_d [1](javascript otmacdl :void(0); “ BUILD FAILED * ”) libsecurity_f [1](javascri iledb pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_f [1](javascript ilevault :void(0); “ BUILD FAILED * ”) libsecurity_k [1](javascript eychain :void(0); “ BUILD FAILED * *”) libsecurity_l *[1](javascri dap_dl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_m *[1](javascri anifest pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_m *[1](javascri ds pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_o [1](javascri cspd pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_p [1](javascri kcs12 pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_s [1](javascri d_cspdl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_s [1](javascript mime :void(0); “ BUILD FAILED * ”) libsecurity_s [1](javascript sl :void(0); “ BUILD FAILED * *”) libsecurity_u *[1](javascri tilities pt:void(0); “ * BUILD SUCCEE DED ”) libsecurityd *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libstdcxx [1](javascript :void(0); “EXI T STATUS: 2”) libstdcxx_40 [1](javascript :void(0); “EXI T STATUS: 2”) libtelnet [1](javascript :void(0); “EXI T STATUS: 2”) libutil *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libxml2 [1](javascript :void(0); “EXI T STATUS: 2”) libxslt *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) lsof *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) lukemftp [1](javascript :void(0); “EXI T STATUS: 2”) lukemftpd [1](javascript :void(0); “EXI T STATUS: 2”) mDNSResponder [1](javascript :void(0); “EXI T STATUS: 2”) mDNSResponderS [1](javascript ystemLibraries :void(0); “EXI T STATUS: 2”) mail_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) mailman [1](javascript :void(0); “EXI T STATUS: 2”) man [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) misc_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) modemccl [1](javascript :void(0); “ BUILD FAILED * ”) msdosfs [1](javascript :void(0); “ BUILD FAILED * ”) nano [1](javascript :void(0); “EXI T STATUS: 2”) nasm [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) ncurses [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) neon [1](javascript :void(0); “EXI T STATUS: 2”) net_snmp [1](javascript :void(0); “EXI T STATUS: 2”) netcat [1](javascript :void(0); “EXI T STATUS: 2”) netinfo [1](javascript :void(0); “EXI T STATUS: 2”) network_cmds [1](javascript :void(0); “ BUILD FAILED * ”) notify [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) ntfs [1](javascript :void(0); “ BUILD FAILED * ”) ntp [1](javascript :void(0); “EXI T STATUS: 2”) objc4 [1](javascript :void(0); “ BUILD FAILED * ”) openmpi [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) pam_modules [1](javascript :void(0); “EXI T STATUS: 2”) passwordserver [1](javascri _sasl pt:void(0); “ * BUILD SUCCEE DED ”) passwordserver [1](javascript _saslextra :void(0); “ BUILD FAILED * ”) passwordserver [1](javascript _saslkerberos :void(0); “ BUILD FAILED * *”) patch_cmds [1](javascript :void(0); “EXI T STATUS: 2”) pb_makefiles [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) pdisk [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) perl [1](javascript :void(0); “EXI T STATUS: 2”) portmap [1](javascript :void(0); “EXI T STATUS: 2”) postfix [1](javascript :void(0); “EXI T STATUS: 2”) ppp [1](javascript :void(0); “ BUILD FAILED * *”) procmail *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) pyOpenSSL *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) pyobjc [1](javascript :void(0); “EXI T STATUS: 2”) python [1](javascript :void(0); “EXI T STATUS: 2”) python23 [1](javascript :void(0); “EXI T STATUS: 2”) python_dateut *[1](javascri il pt:void(0); “ * BUILD SUCCEE DED ”) python_module [1](javascript s :void(0); “EXI T STATUS: 2”) rcs *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) remote_cmds [1](javascript :void(0); “EXI T STATUS: 2”) removefile *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) rsync [1](javascript :void(0); “EXI T STATUS: 2”) ruby [1](javascript :void(0); “EXI T STATUS: 2”) ruby_dnssd *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) ruby_libxml [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) samba [1](javascript :void(0); “EXI T STATUS: 2”) screen [1](javascript :void(0); “EXI T STATUS: 2”) security_auth [1](javascri trampoline pt:void(0); “ * BUILD SUCCEE DED ”) security_cert [1](javascri ificates pt:void(0); “ * BUILD SUCCEE DED ”) security_cert [1](javascri tool pt:void(0); “ * BUILD SUCCEE DED ”) security_crlr [1](javascri efresh pt:void(0); “ * BUILD SUCCEE DED ”) security_dotm [1](javascript ac_tp :void(0); “ BUILD FAILED * ”) security_ocsp [1](javascript d :void(0); “ BUILD FAILED * ”) security_syst [1](javascript emkeychain :void(0); “ BUILD FAILED * ”) securityd [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) shell_cmds [1](javascript :void(0); “EXI T STATUS: 2”) smb [1](javascript :void(0); “ BUILD FAILED * ”) srm [1](javascript :void(0); “EXI T STATUS: 2”) subversion [1](javascript :void(0); “EXI T STATUS: 2”) sudo [1](javascript :void(0); “ BUILD FAILED * *”) svk swig *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) syslog *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) system_cmds [1](javascript :void(0); “EXI T STATUS: 2”) system_config [1](javascript :void(0); “EXI T STATUS: 2”) tcl [1](javascript :void(0); “EXI T STATUS: 2”) tcp_wrappers *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) tcpdump *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) tcsh *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) texi2html *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) texinfo [1](javascript :void(0); “EXI T STATUS: 2”) text_cmds *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) tidy [1](javascript :void(0); “EXI T STATUS: 2”) top *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) update_dyld_ [1](javascri shared_cache pt:void(0); “ * BUILD SUCCEE DED ”) usertemplate [1](javascript :void(0); “EXI T STATUS: 2”) uucp [1](javascript :void(0); “EXI T STATUS: 2”) vim [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) webdavfs [1](javascript :void(0); “ BUILD FAILED * *”) wxWidgets [1](javascript :void(0); “EXI T STATUS: 2”) xar *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) xelf *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) xnu *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) xnu_debug *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) zip [1](javascript :void(0); “EXI T STATUS: 2”) zlib *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) zsh [1](javascript :void(0); “EXI T STATUS: 2”)
129 / 347 successfully built. 345 / 347 sources available (and usable). 344 / 347 binaryroots available. 10B504 status
Without providing any fixes for the projects which do not build on the first pass, the second pass reveals no dependency issue.
PROJECT BIN SRC PAK PASSES Apple16X50Seri [1](javascript al :void(0); “** BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleAPIC [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleDisplays [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) AppleFileSyste [1](javascript mDriver :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleHWSensor [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleIntelPIIX [1](javascript ATA :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleKeyswitch [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleRAID [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleRTL8139Et [1](javascript hernet :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleSMBIOS [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleTalk [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) AppleUSBAudio [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleUSBCDCDri [1](javascript ver :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) AppleUSBIrDA [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) BerkeleyDB BootCache [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) CF [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) CFOpenDirector [1](javascript y :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) CPAN [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) CPANInternal [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) CarbonHeaders [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) ChatServer [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) Chess [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) CommonCrypto [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) CoreOSMakefile [1](javascri s pt:void(0); “ * BUILD SUCCEE DED ”) CrackLib [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Csu [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) CyrusIMAP [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) DSPasswordServ [1](javascript erFramework :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) DSPasswordServ [1](javascript erPlugin :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) DSTools [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) DirectoryServi [1](javascript ce :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) DirectoryServi [1](javascript ceDaemon :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) DirectoryServi [1](javascript ceMIG :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) DiskArbitratio [1](javascript n :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) FastCGI [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ICU [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ICU_debug [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ICU_profile [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) IOACPIFamily [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOATAFamily [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOATAPIProtoco [1](javascript lTransport :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOAudioFamily [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOBDStorageFam [1](javascript ily :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOCDStorageFam [1](javascript ily :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IODVDStorageFa [1](javascript mily :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOFWDVComponen [1](javascript ts :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOFireWireAVC [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOFireWireFami [1](javascript ly :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOFireWireIP [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOFireWireSBP2 [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOFireWireSeri [1](javascript alBusProtocolT :void(0); “ ransport BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOGraphics [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOHIDFamily [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOKitTools [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOKitUser [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IONetworkingFa [1](javascript mily :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOPCIFamily [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOSCSIParallel [1](javascript Family :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOSerialFamily [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOStorageFamil [1](javascript y :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOUSBFamily [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) IOUSBMassStora [1](javascript geClass :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) JavaScriptCore [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) JavaScriptGlue [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED ”) KerberosHelper [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “* BUILD FAI LED **”) LDAPFramework [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) Libc [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) Libc_debug [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) Libc_headers [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libc_man [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libc_profile [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) Libcpp_kext [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libinfo [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) Libm [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libmx [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) Libnotify [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) Librpcsvc [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Libsyscall [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) Libsystem [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) Liby [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) MySQL NFS [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) OpenAL [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) OpenBSM [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) OpenDirectory [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) OpenLDAP [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) OpenSSH [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) OpenSSL096 [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) OpenSSL097 [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) OpenSSL098 [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) PowerManagemen [1](javascript t :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) PyRSS2Gen [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) RubyCocoa [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) RubyGems [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) RubyOnRails [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) SQLite [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) SQLite_tcl [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Security [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) SecurityTokend [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) SecurityTool [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED **”) SmartCardServi *[1](javascri ces pt:void(0); “ * BUILD SUCCEE DED ”) SpamAssassin [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) SquirrelMail [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) SystemStubs *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) TargetConfig *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) TargetConfig_ *[1](javascri headers pt:void(0); “ * BUILD SUCCEE DED ”) TimeZoneData [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Tokend [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) Twisted [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) UserNotificati [1](javascri on pt:void(0); “ * BUILD SUCCEE DED ”) WebCore [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED *”) X11apps [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) X11fonts [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) X11libs [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) X11misc [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) X11proto [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) X11server [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) adv_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) amavisd [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) apache [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) apache_mod_b [1](javascript onjour :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) apache_mod_f [1](javascript astcgi :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) apache_mod_h [1](javascript fs_apple :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) apache_mod_p [1](javascript erl :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) apache_mod_p [1](javascript hp :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) apr [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) architecture [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) autoconf [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) autofs [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) automake [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) autozone [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) awk [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) bash [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) basic_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) bc [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) bind9 bison [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) bison1 [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) bless [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) bootp [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) bootstrap_cmd [1](javascri s pt:void(0); “ * BUILD SUCCEE DED ”) bsdmake [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) bzip2 [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cctools [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cctools_ofile [1](javascript s :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cddafs [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) clamav [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) configd [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) configd_execu [1](javascript tables :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) configd_libSy [1](javascript stem :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) configd_plugi [1](javascript ns :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) copyfile [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cron [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) crontabs [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cscope [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cups [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cups_libs [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) curl [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cvs [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) cxxfilt [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) developer_cmd [1](javascri s pt:void(0); “ * BUILD SUCCEE DED ”) diffstat [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) diskdev_cmds [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) disklabel [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) distcc [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) doc_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) dtrace [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) dyld [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) eap8021x [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED **”) efax [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) emacs [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) enscript [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) expat [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) fetchmail [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) file [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) file_cmds *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) files [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) flex [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) freeradius [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gcc gcc_select [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) gdb [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) glibtool [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gm4 [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gnudiff [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gnumake [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gnuserv [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) gnutar [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gnuzip [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gperf [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gpt [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) graphviz [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) grep [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) groff [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) gssd [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) headerdoc [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) hfs [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) iodbc [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ipsec [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) ipv6configurat [1](javascri ion pt:void(0); “ * BUILD SUCCEE DED ”) kext_tools [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) keymgr [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) ksh [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) launchd [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) launchd_libs [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) ld64 [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) less [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libdispatch [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED **”) libdyld *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libedit [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libffi *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libfs *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libgcc [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libiconv [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libkxld [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libmd [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libpcap [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libresolv [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascript gent :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED **”) libsecurity_a *[1](javascri pple_csp pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascri pple_cspdl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascri pple_file_dl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascri pple_x509_cl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascri pple_x509_tp pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_a [1](javascript sn1 :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libsecurity_a [1](javascript uthorization :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED **”) libsecurity_c [1](javascri dsa_client pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascri dsa_plugin pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascri dsa_utilities pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascri dsa_utils pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascri heckpw pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_c [1](javascript ms :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libsecurity_c [1](javascript odesigning :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libsecurity_c [1](javascri ssm pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_d [1](javascript otmacdl :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libsecurity_f [1](javascri iledb pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_f [1](javascript ilevault :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libsecurity_k [1](javascript eychain :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED *”) libsecurity_l [1](javascri dap_dl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_m [1](javascri anifest pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_m [1](javascri ds pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_o [1](javascript cspd :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libsecurity_p [1](javascri kcs12 pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_s [1](javascri d_cspdl pt:void(0); “ * BUILD SUCCEE DED ”) libsecurity_s [1](javascript mime :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libsecurity_s [1](javascript sl :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libsecurity_u [1](javascri tilities pt:void(0); “ * BUILD SUCCEE DED ”) libsecurityd [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) libstdcxx [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libstdcxx_40 [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libtelnet [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libutil [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) libxml2 [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) libxslt [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) lsof [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) lukemftp [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) lukemftpd [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) mDNSResponder [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) mDNSResponderS [1](javascript ystemLibraries :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) mail_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) mailman [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) man [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) misc_cmds [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) modemccl [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) msdosfs [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) nano [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) nasm [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ncurses [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) neon [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) net_snmp [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) netcat [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) netinfo [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) network_cmds [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) notify [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ntfs [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) ntp [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) objc4 [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) openmpi [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) pam_modules [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) passwordserver [1](javascri _sasl pt:void(0); “ * BUILD SUCCEE DED ”) passwordserver [1](javascript _saslextra :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) passwordserver [1](javascript _saslkerberos :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED *”) patch_cmds [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) pb_makefiles [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) pdisk [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) perl [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) portmap [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) postfix [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ppp [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) procmail [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) pyOpenSSL [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) pyobjc [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) python [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) python23 [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) python_dateut [1](javascript il :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) python_module [1](javascript s :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) rcs [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) remote_cmds [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) removefile [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) rsync [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ruby [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ruby_dnssd [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) ruby_libxml [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) samba [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) screen [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) security_auth [1](javascri trampoline pt:void(0); “ * BUILD SUCCEE DED ”) security_cert [1](javascri ificates pt:void(0); “ * BUILD SUCCEE DED ”) security_cert [1](javascri tool pt:void(0); “ * BUILD SUCCEE DED ”) security_crlr [1](javascri efresh pt:void(0); “ * BUILD SUCCEE DED ”) security_dotm [1](javascript ac_tp :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) security_ocsp [1](javascript d :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) security_syst [1](javascript emkeychain :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) securityd [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) shell_cmds [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) smb [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED ”) srm [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) subversion [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) sudo [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED **”) svk swig [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) syslog [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) system_cmds [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) system_config [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) tcl [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) tcp_wrappers *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) tcpdump [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) tcsh *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) texi2html *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) texinfo [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) text_cmds *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) tidy [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) top [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) update_dyld_ [1](javascri shared_cache pt:void(0); “ * BUILD SUCCEE DED ”) usertemplate [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) uucp [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) vim [1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) webdavfs [1](javascript :void(0); “ BUILD FAILED * ”) [2](javas cript:void(0); “ BUILD FAI LED **”) wxWidgets [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) xar *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) xelf *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) xnu [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) xnu_debug [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) zip [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”) zlib *[1](javascri pt:void(0); “ * BUILD SUCCEE DED ”) zsh [1](javascript :void(0); “EXI T STATUS: 2”) [2](javascrip t:void(0); “EX IT STATUS: 2”)
Darwin 9
… 9L30 status
not tested. 9J61 status
Principle
1-pass
After running the so-called brutus command ``for X in $(darwinxref version ‘*’ | cut -f 1 -d ‘-’); do darwinbuild $X; done`’ the following projects have been successfully built, taking in account that some projects has been excluded as e.g., xnu (because it was already built and packaged as a test case at the beginning), but also MySQL, gcc_42, gcc, BerkeleyDB, bind9 and apache1 which can be built successfully at first or second pass depending the project but definitively takes too much time and space at compilation process (gcc_42 could be soon needed too).
Let’s load the projects freshly built with the following script, even if we don’t need most of them.
for Y in ls Packages | awk -F “.” ‘{print $1}’; do
done
2-pass
Then a second pass will be made, excluding the previous built and load projects, with:
for X in $(darwinxref version '*' | cut -f 1 -d '-'); do
``
for Y in ls Packages | awk -F “.” ‘{print $1}’; do
if [ "$Y" = "$X" ]; then
SAME="true"
break
fi
done
if [ "$SAME" = "false" ]; then
darwinbuild $X
fi
done
What does that mean if we found a “diff” between the two passes? What can we do? 1- Some dependencies (headers and/or binaries part of one or more project) are missing. Consequently, we can at least identify the dependent(s) where at least one dependency is missing (since this dependent failed to build at 1st-pass and success at 2nd-pass). Of course, a 3rd-pass, a 4th-path, etc.. an n-path applies to the same rules. 2- We should run a 3rd-pass on the projects which still fail if between the previous passes, some noticable differences were found. And at the end, we should still obtain more binary roots and less compilation time. 3- A quick electromagnetic solar tempest has just disappeard?
Notes: from scratch, the “~<build attempts>” appended to the project and its version (found in *Logs/<project>/<project>-<version>.log~<build attempts>*, but not only/necessarly here in fact) could be used in the “n-passes” process in order to know if and when the project has been successfully built previously or not. (TODO)
n-pass
At a certain point, projects which cannot be built “by default” will be listed if between a *pass n *and a pass n-1 no difference has been established. Moreover, knowing that a project failed to build at the first pass or fail to build near the other extremum will help in the fixing process.
Results (excerpt)
Current status
The approximative current status (not including the chaos) looks like the following: Some projects have no sources, consequently cannot be built. Some projects have no binaryroots but source and can easily be built. Some projects are hard to build.
The bin column refers to the availability of an “official” binaryroot (e.g., from MacOSforge or Apple). The src column points to the availability of an “official” source. The logs column list (and locally points to the project logs) each build attempt (pass) and its state.
green for exit status 0 (build succeed) orange for exit status 1 (fail) red for exit status 2 (fail) black when “it seems” that no src is available, so nothing can be built.
------------------ ------------------ ------------------ ------------------
**PROJECT** **BIN** **SRC** **LOGS**
Apple16X50Serial [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") **[13](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
Apple3Com3C90x **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleACPIPlatform [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
AppleADBButtons **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleADBKeyboard **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleADBMouse [1](javascript:voi
d(0); "** BUILD FA
ILED **") **[2](j
avascript:void(0);
"** BUILD SUCCEED
ED **")** ^**[3](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**^
AppleAPIC [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
AppleCore99NVRAM **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleDisplays [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
AppleFan **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleFileSystemDri [1](javascript:voi
ver d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
AppleFlashNVRAM **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleGMACEthernet **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleGPIO **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleHWSensor [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
AppleI2C **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleI2S **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleIntel8255x [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
AppleIntelPIIXATA **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleK2SATA **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleK2SATARoot **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleKauaiATA **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleKeyLargo [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
AppleKeyswitch [1](javascript:voi
d(0); "** BUILD FA
ILED **") **[2](j
avascript:void(0);
"** BUILD SUCCEED
ED **")** ^**[3](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**^
AppleKiwiATA **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleKiwiRoot **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleMPIC **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleMacRISC2PE **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleMacRISC4PE [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **")
AppleMacRiscPCI **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleMediaBay **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleOnboardAudio [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
ApplePCCard16ATA **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
ApplePCCardATA **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleRAID [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") ^**[7]
(javascript:void(0
); "** BUILD SUCCE
EDED **")**^ [8](
javascript:void(0)
; "** BUILD FAILED
**")
AppleRS232Serial [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
AppleRTC [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
AppleRTL8139Ethern **[1](javascript:v
et oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleSCCSerial [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
AppleSMBIOS [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
AppleSym8xx **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleTalk [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") **[12](java
script:void(0); "*
* BUILD SUCCEEDED
**")**
AppleThermal **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
AppleUSBAudio [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
AppleUSBCDCDriver [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
AppleUSBIrDA [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
AppleVIA **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
BerkeleyDB **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
BootCache [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") **[13](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
BootX [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
CF [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
CFNetwork [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2")
CFOpenDirectory [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
CPAN [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
CPANInternal [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
CarbonHeaders **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
ChatServer [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
Chess [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
)
CommonCrypto **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
CoreOSMakefiles [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
CrackLib **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
Csu **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
CyrusIMAP [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") **[14](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
DSPasswordServerFr [1](javascript:voi
amework d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
DSPasswordServerPl [1](javascript:voi
ugin d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
DSTools [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
DirectoryService [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
)
DirectoryServiceDa [1](javascript:voi
emon d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **")
DirectoryServiceMI [1](javascript:voi
G d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
DiskArbitration [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
DynamicPowerStep [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") **[8](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
FastCGI [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
FirewallTool [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
ICU **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
ICU_debug **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
ICU_profile **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
IOACPIFamily **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
IOADBFamily **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
IOATABlockStorage [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
IOATAFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOATAPIProtocolTra [1](javascript:voi
nsport d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
IOAudioFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOBDStorageFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
IOCDStorageFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IODVDStorageFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOFWDVComponents [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
IOFireWireAVC [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") **[8](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
IOFireWireFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOFireWireIP [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOFireWireSBP2 [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOFireWireSerialBu [1](javascript:voi
sProtocolTransport d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
IOGraphics [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOHIDFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
IOI2CFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOKitTools [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOKitUser [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") ^[
9](javascript:void
(0); "** BUILD FAI
LED **")^ [10](ja
vascript:void(0);
"** BUILD FAILED *
*") [11](javascri
pt:void(0); "** BU
ILD FAILED **")
IONetworkingFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
IOPCCardFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOPCIFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOSCSIArchitecture [1](javascript:voi
ModelFamily d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
IOSCSIParallelFami [1](javascript:voi
ly d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
IOSerialFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
IOStorageFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
IOUSBFamily [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
IOUSBMassStorageCl [1](javascript:voi
ass d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
JavaScriptCore [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **") [15
](javascript:void(
0); "** BUILD FAIL
ED **") [16](java
script:void(0); "*
* BUILD FAILED **"
) [17](javascript
:void(0); "** BUIL
D FAILED **") [18
](javascript:void(
0); "** BUILD FAIL
ED **") [19](java
script:void(0); "*
* BUILD FAILED **"
) [20](javascript
:void(0); "EXIT ST
ATUS: ?") [21](ja
vascript:void(0);
"** BUILD FAILED *
*") [22](javascri
pt:void(0); "** BU
ILD FAILED **") [
23](javascript:voi
d(0); "** BUILD FA
ILED **") [24](ja
vascript:void(0);
"** BUILD FAILED *
*")
JavaScriptGlue [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
Kerberos [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
KerberosHelper [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
KeyLargoATA **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
LDAPFramework [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") **[
13](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
Libc [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") [14](javascri
pt:void(0); "EXIT
STATUS: 2") [15](
javascript:void(0)
; "EXIT STATUS: 2"
) [16](javascript
:void(0); "EXIT ST
ATUS: 2") [17](ja
vascript:void(0);
"EXIT STATUS: 2")
**[18](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
Libc_debug [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") **[
13](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
Libc_headers [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") **[5](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
Libc_man [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") **[5](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
Libc_profile [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") **[
13](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
Libcpp_kext **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
Libinfo [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
Libm **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
Libmx **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
Libnotify [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
Librpcsvc **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
Libstreams **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
Libsyscall [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
Libsystem [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2")
Liby **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
MacPorts **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
**[2](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
MySQL
NFS [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") **[8]
(javascript:void(0
); "** BUILD SUCCE
EDED **")**
NullCPUPowerManage **[1](javascript:v
ment oid(0); "** BUILD
SUCCEEDED **")**
OpenAL [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
OpenDirectory [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
OpenLDAP [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") [14](javascri
pt:void(0); "EXIT
STATUS: 2")
OpenSSH [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
OpenSSL [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
OpenSSL096 [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
PowerManagement [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
PyRSS2Gen [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
RubyCocoa [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
RubyGems [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
RubyOnRails [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
SCSIHeaderInstalle **[1](javascript:v
r oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
SQLite [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
Security [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
SecurityTokend [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
SecurityTool [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
SmartCardServices [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
SpamAssassin [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
SquirrelMail **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
SystemStubs **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
**[3](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
**[4](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
TargetConfig [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
TargetConfig_host [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
TimeZoneData **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
Tokend **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
Twisted [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
TwistedWords [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
TwistedXish [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
UserNotification [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
VirtualAudioDriver [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
WebCore [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
X11apps [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
X11fonts [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
X11libs [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
X11misc [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
X11proto [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
X11server [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
adv_cmds **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
amavisd **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
apache [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2")
apache1
apache_mod_bonjo [1](javascript:voi
ur d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
apache_mod_fastc [1](javascript:voi
gi d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
apache_mod_hfs_ [1](javascript:voi
apple d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
apache_mod_perl [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
apache_mod_perl1 [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
apache_mod_php [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
apache_mod_php4 [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
apache_mod_ssl [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
apr [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
architecture **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
at_cmds [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") [14](javascri
pt:void(0); "EXIT
STATUS: 2") [15](
javascript:void(0)
; "EXIT STATUS: 2"
) [16](javascript
:void(0); "EXIT ST
ATUS: 2") [17](ja
vascript:void(0);
"EXIT STATUS: 2")
[18](javascript:v
oid(0); "EXIT STAT
US: 2") [19](java
script:void(0); "E
XIT STATUS: 2") *
*[20](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
autoconf [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
autofs [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **") [15
](javascript:void(
0); "** BUILD FAIL
ED **") [16](java
script:void(0); "*
* BUILD FAILED **"
) [17](javascript
:void(0); "** BUIL
D FAILED **") [18
](javascript:void(
0); "** BUILD FAIL
ED **") [19](java
script:void(0); "*
* BUILD FAILED **"
) [20](javascript
:void(0); "** BUIL
D FAILED **") [21
](javascript:void(
0); "** BUILD FAIL
ED **") [22](java
script:void(0); "*
* BUILD FAILED **"
) [23](javascript
:void(0); "** BUIL
D FAILED **") [24
](javascript:void(
0); "** BUILD FAIL
ED **") [25](java
script:void(0); "*
* BUILD FAILED **"
) [26](javascript
:void(0); "** BUIL
D FAILED **") [27
](javascript:void(
0); "** BUILD FAIL
ED **") [28](java
script:void(0); "*
* BUILD FAILED **"
) [29](javascript
:void(0); "** BUIL
D FAILED **") [30
](javascript:void(
0); "** BUILD FAIL
ED **") [31](java
script:void(0); "*
* BUILD FAILED **"
) [32](javascript
:void(0); "** BUIL
D FAILED **")
automake [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
autozone **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
awk [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
bash [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
basic_cmds [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
bc [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
bind9
bison [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
bison1 [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
bless [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
bootp [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **") [15
](javascript:void(
0); "** BUILD FAIL
ED **") [16](java
script:void(0); "*
* BUILD FAILED **"
) [17](javascript
:void(0); "** BUIL
D FAILED **") [18
](javascript:void(
0); "** BUILD FAIL
ED **")
bootstrap_cmds [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
bsdmake [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
bsm [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
bzip2 [1](javascript:voi
d(0); "EXIT STATUS
: 2") **[2](javas
cript:void(0); "**
BUILD SUCCEEDED *
*")** ^**[3](java
script:void(0); "*
* BUILD SUCCEEDED
**")**^
cctools [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
cctools_ofiles [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
cddafs [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") **[8](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
clamav [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
configd [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
configd_executabl [1](javascript:voi
es d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
configd_plugins [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "** BUILD FAIL
ED **") [14](java
script:void(0); "E
XIT STATUS: 2") [
15](javascript:voi
d(0); "EXIT STATUS
: ?") [16](javasc
ript:void(0); "**
BUILD FAILED **")
[17](javascript:v
oid(0); "** BUILD
FAILED **") [18](
javascript:void(0)
; "** BUILD FAILED
**") [19](javasc
ript:void(0); "**
BUILD FAILED **")
[20](javascript:v
oid(0); "EXIT STAT
US: 2") [21](java
script:void(0); "*
* BUILD FAILED **"
)
copyfile [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2")
cron [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
crontabs **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
cscope **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
cups [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
curl **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
cvs **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
cvs_wrapped **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
cxxfilt [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") **[5](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
developer_cmds **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
diffstat **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
diskdev_cmds [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
disklabel [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
distcc [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
doc_cmds **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
drvAppleCMD646Root **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
dtrace [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **") [15
](javascript:void(
0); "** BUILD FAIL
ED **") [16](java
script:void(0); "*
* BUILD FAILED **"
) **[17](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
dyld [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **") [15
](javascript:void(
0); "** BUILD FAIL
ED **") [16](java
script:void(0); "*
* BUILD FAILED **"
) [17](javascript
:void(0); "** BUIL
D FAILED **") [18
](javascript:void(
0); "** BUILD FAIL
ED **")
eap8021x [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2")
efax [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") **[14](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
efiboot [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2")
emacs [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") **[14](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
enscript **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
expat **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
extenTools **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
fetchmail **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
file **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
file_cmds **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
files **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
flex **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
freeradius [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
)
gcc [1](javascript:voi
d(0); "EXIT STATUS
: 2")
gcc_42 [1](javascript:voi
d(0); "EXIT STATUS
: 2")
gcc_os [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
gcc_select **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
gccfast [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
gdb [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
gdbforcw [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") **[5](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
glibtool **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
gm4 **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
gnudiff **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
gnumake **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
gnuserv [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") **[
13](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
gnutar [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") **[
13](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
gnuzip **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
gperf **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
gpt [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
graphviz **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
grep **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
groff **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
gssd [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
gutenprint [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
headerdoc [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
hfs **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
iodbc [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") [14](javascri
pt:void(0); "EXIT
STATUS: 2") [15](
javascript:void(0)
; "EXIT STATUS: 2"
) [16](javascript
:void(0); "EXIT ST
ATUS: 2") [17](ja
vascript:void(0);
"EXIT STATUS: 2")
[18](javascript:v
oid(0); "EXIT STAT
US: 2")
ipsec [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") **[8](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
ipv6configuration [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **")
isoutil [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") *
*[11](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
jam **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
kext_tools [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") **[13](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
keymaps **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
keymgr **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
ksh **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
launchd [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **")
launchd_libs [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")** **[8](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
ld64 **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
less **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libdwarf [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: ?") [
6](javascript:void
(0); "EXIT STATUS:
?") [7](javascri
pt:void(0); "EXIT
STATUS: ?") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: ?") [10](java
script:void(0); "E
XIT STATUS: ?") [
11](javascript:voi
d(0); "EXIT STATUS
: ?") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") [14](javascri
pt:void(0); "EXIT
STATUS: 2")
libdyld [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") **
[9](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
libedit **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libelf **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
libffi **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libfs **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libgcc [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
libiconv **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libmd **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libpcap **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libresolv [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
libsecurity_agent [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") **
[9](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
libsecurity_apple [1](javascript:voi
_csp d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "EXIT ST
ATUS: ?") [12](ja
vascript:void(0);
"EXIT STATUS: ?")
[13](javascript:v
oid(0); "** BUILD
FAILED **") [14](
javascript:void(0)
; "** BUILD FAILED
**") [15](javasc
ript:void(0); "EXI
T STATUS: ?") **[
16](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
libsecurity_apple [1](javascript:voi
_cspdl d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "EXIT ST
ATUS: ?") [12](ja
vascript:void(0);
"EXIT STATUS: ?")
[13](javascript:v
oid(0); "EXIT STAT
US: ?") [14](java
script:void(0); "*
* BUILD FAILED **"
) [15](javascript
:void(0); "** BUIL
D FAILED **")
libsecurity_apple [1](javascript:voi
_file_dl d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") **[
12](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
libsecurity_apple [1](javascript:voi
_x509_cl d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_apple [1](javascript:voi
_x509_tp d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
** **[12](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
libsecurity_asn1 [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
** **[12](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
libsecurity_autho [1](javascript:voi
rization d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
libsecurity_cdsa [1](javascript:voi
_client d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_cdsa [1](javascript:voi
_plugin d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
** **[12](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
libsecurity_cdsa [1](javascript:voi
_utilities d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
)
libsecurity_cdsa [1](javascript:voi
_utils d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") **[8](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
libsecurity_check [1](javascript:voi
pw d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
libsecurity_cms [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
** **[12](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
libsecurity_codes [1](javascript:voi
igning d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **") [15
](javascript:void(
0); "** BUILD FAIL
ED **") [16](java
script:void(0); "*
* BUILD FAILED **"
) [17](javascript
:void(0); "** BUIL
D FAILED **") [18
](javascript:void(
0); "** BUILD FAIL
ED **") [19](java
script:void(0); "*
* BUILD FAILED **"
) [20](javascript
:void(0); "** BUIL
D FAILED **") [21
](javascript:void(
0); "** BUILD FAIL
ED **") [22](java
script:void(0); "E
XIT STATUS: ?") [
23](javascript:voi
d(0); "EXIT STATUS
: ?") [24](javasc
ript:void(0); "**
BUILD FAILED **")
[25](javascript:v
oid(0); "EXIT STAT
US: ?")
libsecurity_cssm [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_dotma [1](javascript:voi
cdl d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
libsecurity_filed [1](javascript:voi
b d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_filev [1](javascript:voi
ault d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "EXIT ST
ATUS: ?") [15](ja
vascript:void(0);
"EXIT STATUS: ?")
[16](javascript:v
oid(0); "EXIT STAT
US: ?") [17](java
script:void(0); "*
* BUILD FAILED **"
) [18](javascript
:void(0); "EXIT ST
ATUS: ?") **[19](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
libsecurity_keych [1](javascript:voi
ain d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "EXIT ST
ATUS: ?") [12](ja
vascript:void(0);
"EXIT STATUS: ?")
[13](javascript:v
oid(0); "EXIT STAT
US: ?") [14](java
script:void(0); "*
* BUILD FAILED **"
) [15](javascript
:void(0); "** BUIL
D FAILED **") [16
](javascript:void(
0); "EXIT STATUS:
?") **[17](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
libsecurity_ldap [1](javascript:voi
_dl d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) **[14](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_manif [1](javascript:voi
est d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_mds [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") **[
12](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
libsecurity_ocspd [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") **
[9](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
libsecurity_pkcs1 [1](javascript:voi
2 d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "EXIT ST
ATUS: ?") [12](ja
vascript:void(0);
"** BUILD FAILED *
*") [13](javascri
pt:void(0); "** BU
ILD FAILED **") *
*[14](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
libsecurity_sd_c [1](javascript:voi
spdl d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_smime [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_ssl [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libsecurity_utili [1](javascript:voi
ties d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "EXIT ST
ATUS: ?") [12](ja
vascript:void(0);
"EXIT STATUS: ?")
[13](javascript:v
oid(0); "EXIT STAT
US: ?") [14](java
script:void(0); "E
XIT STATUS: ?") [
15](javascript:voi
d(0); "EXIT STATUS
: ?") **[16](java
script:void(0); "*
* BUILD SUCCEEDED
**")**
libsecurityd [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) **[11](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
libstdcxx [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") **[5](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
libstdcxx_SUPanWh [1](javascript:voi
eat d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
libtelnet **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libutil **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
libxml2 [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") **[8]
(javascript:void(0
); "** BUILD SUCCE
EDED **")**
libxslt [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
lsof **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
lukemftp **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
lukemftpd **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
mDNSResponder [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
mDNSResponderSyste [1](javascript:voi
mLibraries d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
mail_cmds **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
mailman [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
man **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
misc_cmds **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
modemccl [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
msdosfs [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") **[8](javascr
ipt:void(0); "** B
UILD SUCCEEDED **"
)**
nano **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
nasm **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
ncurses [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") **[3
](javascript:void(
0); "** BUILD SUCC
EEDED **")** ^**[
4](javascript:void
(0); "** BUILD SUC
CEEDED **")**^
neon [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") **[3
](javascript:void(
0); "** BUILD SUCC
EEDED **")** ^**[
4](javascript:void
(0); "** BUILD SUC
CEEDED **")**^
net_snmp [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
netcat **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
netinfo [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: ?") [10](java
script:void(0); "E
XIT STATUS: 2") *
*[11](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
network_cmds [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
notify [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
ntfs [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
ntp [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") [14](javascri
pt:void(0); "EXIT
STATUS: 2") **[15
](javascript:void(
0); "** BUILD SUCC
EEDED **")** **[1
6](javascript:void
(0); "** BUILD SUC
CEEDED **")**
objc4 **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
openmpi **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
pam **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
pam_modules [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") [14](javascri
pt:void(0); "EXIT
STATUS: 2")
passwordserver_sa [1](javascript:voi
sl d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") **[13](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
passwordserver_sa **[1](javascript:v
slextra oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
passwordserver_sa [1](javascript:voi
slkerberos d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **") **[
15](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
patch_cmds **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
pb_makefiles **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
pbx_jamfiles **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
pcsc
pdisk [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
perl [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
portmap [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
postfix [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") **[
13](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
ppp [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
procmail **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
project_makefiles [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") **[5](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
pyOpenSSL [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
pyobjc [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
python [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
python23 [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
python_dateutil [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
python_modules [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
rcs **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
remote_cmds [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
removefile **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
rsync **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
ruby [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
ruby_dnssd [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
ruby_libxml [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
samba [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
screen [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
**[9](javascript
:void(0); "** BUIL
D SUCCEEDED **")**
security_authtram **[1](javascript:v
poline oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
security_certific **[1](javascript:v
ates oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
security_certtool [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") **
[9](javascript:voi
d(0); "** BUILD SU
CCEEDED **")**
security_crlrefre [1](javascript:voi
sh d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") **[10](ja
vascript:void(0);
"** BUILD SUCCEEDE
D **")**
security_dotmac_ [1](javascript:voi
tp d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
) [14](javascript
:void(0); "** BUIL
D FAILED **") [15
](javascript:void(
0); "EXIT STATUS:
?") [16](javascri
pt:void(0); "EXIT
STATUS: ?") [17](
javascript:void(0)
; "EXIT STATUS: ?"
) [18](javascript
:void(0); "** BUIL
D FAILED **") [19
](javascript:void(
0); "** BUILD FAIL
ED **") [20](java
script:void(0); "E
XIT STATUS: ?") [
21](javascript:voi
d(0); "EXIT STATUS
: ?") [22](javasc
ript:void(0); "**
BUILD FAILED **")
[23](javascript:v
oid(0); "EXIT STAT
US: ?") [24](java
script:void(0); "*
* BUILD FAILED **"
) [25](javascript
:void(0); "EXIT ST
ATUS: ?") [26](ja
vascript:void(0);
"** BUILD FAILED *
*") [27](javascri
pt:void(0); "** BU
ILD FAILED **") [
28](javascript:voi
d(0); "** BUILD FA
ILED **") **[29](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
security_ocspd [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
security_privport [1](javascript:voi
server d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
security_systemke [1](javascript:voi
ychain d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
)
securityd [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **") [13](java
script:void(0); "*
* BUILD FAILED **"
)
shell_cmds [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
smb [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
srm **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
stmalloc **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
subversion [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
sudo **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
svk
swig **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
syslog [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2") [13
](javascript:void(
0); "EXIT STATUS:
2") [14](javascri
pt:void(0); "EXIT
STATUS: 2")
system_cmds [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
system_config **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
tcl [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
tcl_ext [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
tcl_tk [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
tcp_wrappers **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
tcpdump [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") **[3
](javascript:void(
0); "** BUILD SUCC
EEDED **")** ^**[
4](javascript:void
(0); "** BUILD SUC
CEEDED **")**^
tcsh **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
texi2html **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
texinfo [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") **[3
](javascript:void(
0); "** BUILD SUCC
EEDED **")** ^**[
4](javascript:void
(0); "** BUILD SUC
CEEDED **")**^
text_cmds **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
tidy [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") **[12](java
script:void(0); "*
* BUILD SUCCEEDED
**")**
top [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") **[7](javasc
ript:void(0); "**
BUILD SUCCEEDED **
")**
usertemplate [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") **[8]
(javascript:void(0
); "** BUILD SUCCE
EDED **")**
uucp **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
vim **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
webdavfs [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") [7](ja
vascript:void(0);
"** BUILD FAILED *
*") [8](javascrip
t:void(0); "** BUI
LD FAILED **") [9
](javascript:void(
0); "** BUILD FAIL
ED **") [10](java
script:void(0); "*
* BUILD FAILED **"
) [11](javascript
:void(0); "** BUIL
D FAILED **") [12
](javascript:void(
0); "** BUILD FAIL
ED **")
wxWidgets [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") [3](
javascript:void(0)
; "EXIT STATUS: 2"
) [4](javascript:
void(0); "EXIT STA
TUS: 2") [5](java
script:void(0); "E
XIT STATUS: 2") [
6](javascript:void
(0); "EXIT STATUS:
2") [7](javascri
pt:void(0); "EXIT
STATUS: 2") [8](j
avascript:void(0);
"EXIT STATUS: 2")
[9](javascript:v
oid(0); "EXIT STAT
US: 2") [10](java
script:void(0); "E
XIT STATUS: 2") [
11](javascript:voi
d(0); "EXIT STATUS
: 2") [12](javasc
ript:void(0); "EXI
T STATUS: 2")
xar [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") [3](javascript
:void(0); "** BUIL
D FAILED **") [4]
(javascript:void(0
); "** BUILD FAILE
D **") [5](javasc
ript:void(0); "**
BUILD FAILED **")
[6](javascript:vo
id(0); "** BUILD F
AILED **") **[7](
javascript:void(0)
; "** BUILD SUCCEE
DED **")**
xelf **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
xnu **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
zfs [1](javascript:voi
d(0); "** BUILD FA
ILED **") [2](jav
ascript:void(0); "
** BUILD FAILED **
") **[3](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
** **[4](javascri
pt:void(0); "** BU
ILD SUCCEEDED **")
**
zip **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
zlib [1](javascript:voi
d(0); "EXIT STATUS
: 2") [2](javascr
ipt:void(0); "EXIT
STATUS: 2") **[3
](javascript:void(
0); "** BUILD SUCC
EEDED **")** ^**[
4](javascript:void
(0); "** BUILD SUC
CEEDED **")**^
zsh **[1](javascript:v
oid(0); "** BUILD
SUCCEEDED **")**
^**[2](javascript:
void(0); "** BUILD
SUCCEEDED **")**^
------------------ ------------------ ------------------ ------------------
------------------------------------------------------------------------
289 / 417 successfully built.
121 / 417 failed to build.
------------------------------------------------------------------------
#### 1..3-pass
After the first pass and using `/opt/local/share/darwinbuild/packageRoots', many projects have been built and packaged successfully.
On the other side, there is the list of packages which have not been built successfully for any reasons.
Just before running into the second pass, we will load all these freshly built projects. Then we will see if more projects are built after the second pass.
These binary roots will be also loaded.
Another step which could have been done at the beginning or each pass is to load headers (-headers):
`for Y in `ls Packages | awk -F "." '{print $1}'`; do`
` darwinbuild -headers $Y`
`done`
Build succeeded:
+--------------------+--------------------+--------------------+--------------------+
| <span | **2-pass** | **3-pass** | **3-pass' |
| style="font-weight | | | (-headers)** |
| :bold">1-pass</spa | | | |
| n> | | | |
+--------------------+--------------------+--------------------+--------------------+
| <span | <span | <span | <span |
| style="border-coll | style="border-coll | style="border-coll | style="border-coll |
| apse:separate"></s | apse:separate"></s | apse:separate"></s | apse:separate;font |
| pan> | pan> | pan> | -family:courier ne |
| <div | <div> | <div> | w,Verdana,sans-ser |
| style="text-align: | | | if"></span> |
| left"> | <span | <span | <div> |
| | style="font-family | style="font-size:x | |
| <span | :arial,sans-serif" | -small">ncurses-21 | <span |
| style="font-family | ><span | ~3</span> | style="font-family |
| :arial,sans-serif" | style="font-size:x | | :arial,sans-serif" |
| ><span | -small">AppleADBMo | </div> | ><span |
| style="font-size:x | use-212~2</span>< | | style="font-size:x |
| -small">Apple3Com3 | /span> | <div> | -small">Apple3Com3 |
| C90x-10~1</span>< | | | C<span |
| /span> | </div> | <span | style="font-family |
| | | style="font-size:x | :courier new;font- |
| </div> | <div> | -small">neon-8~3< | size:12px"><span |
| | | /span> | style="font-family |
| <div> | <span | | :arial;font-size:1 |
| | style="font-family | </div> | 0px">90x-10~2 |
| <span | :arial,sans-serif" | | <span |
| style="font-family | ><span | <div> | style="font-family |
| :arial,sans-serif" | style="font-size:x | | :Arial">AppleADBBu |
| ><span | -small">AppleKeysw | <span | tt</span>ons-300~ |
| style="font-size:x | itch-104.0.1~2</s | style="font-size:x | 2</span></span></s |
| -small">AppleADBBu | pan></span> | -small">tcpdump-23 | pan></span> |
| ttons-300~1</span | | ~3</span> | |
| ></span> | </div> | | </div> |
| | | </div> | |
| </div> | <div> | | <div> |
| | | <div> | |
| <div> | <span | | <span |
| | style="font-family | <span | style="font-family |
| <span | :arial,sans-serif" | style="font-size:x | :arial,sans-serif" |
| style="font-family | ><span | -small">texinfo-17 | ><span |
| :arial,sans-serif" | style="font-size:x | ~3</span> | style="font-size:x |
| ><span | -small">CoreOSMake | | -small">AppleADBKe |
| style="font-size:x | files-52~2</span> | </div> | yboard-239.1~2</s |
| -small">AppleADBKe | </span> | | pan></span> |
| yboard-239.1~1</s | | <div> | |
| pan></span> | </div> | | </div> |
| | | <span | |
| </div> | <div> | style="font-size:x | <div> |
| | | -small">zlib-18~3 | |
| <div> | <span | </span> | <span |
| | style="font-family | | style="font-family |
| <span | :arial,sans-serif" | </div> | :arial,sans-serif" |
| style="font-family | ><span | | ><span |
| :arial,sans-serif" | style="font-size:x | | style="font-size:x |
| ><span | -small">OpenSSL096 | | -small">AppleADBMo |
| style="font-size:x | -6.2~2</span></sp | | use-212~3</span>< |
| -small">AppleCore9 | an> | | /span> |
| 9NVRAM-111.3.1~1< | | | |
| /span></span> | </div> | | </div> |
| | | | |
| </div> | <div> | | <div> |
| | | | |
| <div> | <span | | <span |
| | style="font-family | | style="font-family |
| <span | :arial,sans-serif" | | :arial,sans-serif" |
| style="font-family | ><span | | ><span |
| :arial,sans-serif" | style="font-size:x | | style="font-size:x |
| ><span | -small">TargetConf | | -small">AppleCore9 |
| style="font-size:x | ig-6~2</span></sp | | 9NVRAM-111.3.1~2< |
| -small">AppleFan-1 | an> | | /span></span> |
| 10.3.1~1</span></ | | | |
| span> | </div> | | </div> |
| | | | |
| </div> | <div> | | <div> |
| | | | |
| <div> | <span | | <span |
| | style="font-family | | style="font-family |
| <span | :arial,sans-serif" | | :arial,sans-serif" |
| style="font-family | ><span | | ><span |
| :arial,sans-serif" | style="font-size:x | | style="font-size:x |
| ><span | -small">TargetConf | | -small">AppleFan-1 |
| style="font-size:x | ig_host-6~2</spa | | 10.3.1~2</span></ |
| -small">AppleFlash | n></span> | | span> |
| NVRAM-105.4.0~1</ | | | |
| span></span> | </div> | | </div> |
| | | | |
| </div> | <div> | | <div> |
| | | | |
| <div> | <span | | <span |
| | style="font-family | | style="font-family |
| <span | :arial,sans-serif" | | :arial,sans-serif" |
| style="font-family | ><span | | ><span |
| :arial,sans-serif" | style="font-size:x | | style="font-size:x |
| ><span | -small">apache_mo | | -small">AppleFlash |
| style="font-size:x | d_perl1-16~2</sp | | NVRAM-105.4.0~2</ |
| -small">AppleGMACE | an></span> | | span></span> |
| thernet-157.3.1~1 | | | |
| </span></span> | </div> | | </div> |
| | | | |
| </div> | <div> | | <div> |
| | | | |
| <div> | <span | | <span |
| | style="font-family | | style="font-family |
| <span | :arial,sans-serif" | | :arial,sans-serif" |
| style="font-family | ><span | | ><span |
| :arial,sans-serif" | style="font-size:x | | style="font-size:x |
| ><span | -small">apache_mo | | -small">AppleGMACE |
| style="font-size:x | d_ssl-690~2</spa | | thernet-157.3.1~2 |
| -small">AppleGPIO- | n></span> | | </span></span> |
| 131.0.0~1</span>< | | | |
| /span> | </div> | | </div> |
| | | | |
| </div> | <div> | | <div> |
| | | | |
| <div> | <span | | <span |
| | style="font-family | | style="font-family |
| <span | :arial,sans-serif" | | :arial,sans-serif" |
| style="font-family | ><span | | ><span |
| :arial,sans-serif" | style="font-size:x | | style="font-size:x |
| ><span | -small">apr-12~2< | | -small">AppleGPIO- |
| style="font-size:x | /span></span> | | 131.0.0~2</span>< |
| -small">AppleI2C-4 | | | /span> |
| 00.0.3~1</span></ | </div> | | |
| span> | | | </div> |
| | <div> | | |
| </div> | | | <div> |
| | <span | | |
| <div> | style="font-family | | <span |
| | :arial,sans-serif" | | style="font-family |
| <span | ><span | | :arial,sans-serif" |
| style="font-family | style="font-size:x | | ><span |
| :arial,sans-serif" | -small">autoconf-1 | | style="font-size:x |
| ><span | 4~2</span></span> | | -small">AppleI2C-4 |
| style="font-size:x | | | 00.0.3~2</span></ |
| -small">AppleI2S-1 | </div> | | span> |
| 01.3.1~1</span></ | | | |
| span> | <div> | | </div> |
| | | | |
| </div> | <span | | <div> |
| | style="font-family | | |
| <div> | :arial,sans-serif" | | <span |
| | ><span | | style="font-family |
| <span | style="font-size:x | | :arial,sans-serif" |
| style="font-family | -small">automake-7 | | ><span |
| :arial,sans-serif" | ~2</span></span> | | style="font-size:x |
| ><span | | | -small">AppleI2S-1 |
| style="font-size:x | </div> | | 01.3.1~2</span></ |
| -small">AppleIntel | | | span> |
| PIIXATA-200.0.1~1 | <div> | | |
| </span></span> | | | </div> |
| | <span | | |
| </div> | style="font-family | | <div> |
| | :arial,sans-serif" | | |
| <div> | ><span | | <span |
| | style="font-size:x | | style="font-family |
| <span | -small">awk-11~2< | | :arial,sans-serif" |
| style="font-family | /span></span> | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | </div> | | -small">AppleIntel |
| style="font-size:x | | | PIIXATA-200.0.1~2 |
| -small">AppleK2SAT | <div> | | </span></span> |
| A-104.3.2~1</span | | | |
| ></span> | <span | | </div> |
| | style="font-family | | |
| </div> | :arial,sans-serif" | | <div> |
| | ><span | | |
| <div> | style="font-size:x | | <span |
| | -small">bash-76.2 | | style="font-family |
| <span | ~2</span></span> | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | </div> | | style="font-size:x |
| ><span | | | -small">AppleK2SAT |
| style="font-size:x | <div> | | A-104.3.2~2</span |
| -small">AppleK2SAT | | | ></span> |
| ARoot-105.2.2~1</ | <span | | |
| span></span> | style="font-family | | </div> |
| | :arial,sans-serif" | | |
| </div> | ><span | | <div> |
| | style="font-size:x | | |
| <div> | -small">basic_cmd | | <span |
| | s-48~2</span></sp | | style="font-family |
| <span | an> | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | </div> | | style="font-size:x |
| ><span | | | -small">AppleK2SAT |
| style="font-size:x | <div> | | ARoot-105.2.2~2</ |
| -small">AppleKauai | | | span></span> |
| ATA-121.3.4~1</sp | <span | | |
| an></span> | style="font-family | | </div> |
| | :arial,sans-serif" | | |
| </div> | ><span | | <div> |
| | style="font-size:x | | |
| <div> | -small">bc-21~2</ | | <span |
| | span></span> | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | </div> | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | <div> | | -small">AppleKauai |
| style="font-size:x | | | ATA-121.3.4~2</sp |
| -small">AppleKiwiA | <span | | an></span> |
| TA-102.3.2~1</spa | style="font-family | | |
| n></span> | :arial,sans-serif" | | </div> |
| | ><span | | |
| </div> | style="font-size:x | | <div> |
| | -small">bison-13~ | | |
| <div> | 2</span></span> | | <span |
| | | | style="font-family |
| <span | </div> | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | <div> | | style="font-size:x |
| ><span | | | -small">AppleKeysw |
| style="font-size:x | <span | | itch-104.0.1~3</s |
| -small">AppleKiwiR | style="font-family | | pan></span> |
| oot-105.3.1~1</sp | :arial,sans-serif" | | |
| an></span> | ><span | | </div> |
| | style="font-size:x | | |
| </div> | -small">bison1-1~ | | <div> |
| | 2</span></span> | | |
| <div> | | | <span |
| | </div> | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | <div> | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | <span | | -small">AppleKiwiA |
| style="font-size:x | style="font-family | | TA-102.3.2~2</spa |
| -small">AppleMPIC- | :arial,sans-serif" | | n></span> |
| 1.5.3~1</span></s | ><span | | |
| pan> | style="font-size:x | | </div> |
| | -small">bootstrap | | |
| </div> | _cmds-60.1~2</spa | | <div> |
| | n></span> | | |
| <div> | | | <span |
| | </div> | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | <div> | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | <span | | -small">AppleKiwiR |
| style="font-size:x | style="font-family | | oot-105.3.1~2</sp |
| -small">AppleMacRI | :arial,sans-serif" | | an></span> |
| SC2PE-187.0.5~1</ | ><span | | |
| span></span> | style="font-size:x | | </div> |
| | -small">bsdmake-23 | | |
| </div> | ~2</span></span> | | <div> |
| | | | |
| <div> | </div> | | <span |
| | | | style="font-family |
| <span | <div> | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | <span | | style="font-size:x |
| ><span | style="font-family | | -small">AppleMPIC- |
| style="font-size:x | :arial,sans-serif" | | 1.5.3~2</span></s |
| -small">AppleMacRi | ><span | | pan> |
| scPCI-3.4~1</span | style="font-size:x | | |
| ></span> | -small">bsm-13~2< | | </div> |
| | /span></span> | | |
| </div> | | | <div> |
| | </div> | | |
| <div> | | | <span |
| | <div> | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | <span | | ><span |
| :arial,sans-serif" | style="font-family | | style="font-size:x |
| ><span | :arial,sans-serif" | | -small">AppleMacRI |
| style="font-size:x | ><span | | SC2PE-187.0.5~2</ |
| -small">AppleMedia | style="font-size:x | | span></span> |
| Bay-102.3.1~1</sp | -small">bzip2-16~ | | |
| an></span> | 2</span></span> | | </div> |
| | | | |
| </div> | </div> | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">AppleMacRi |
| style="font-size:x | | | scPCI-3.4~2</span |
| -small">ApplePCCar | | | ></span> |
| d16ATA-113~1</spa | | | |
| n></span> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">AppleMedia |
| style="font-size:x | | | Bay-102.3.1~2</sp |
| -small">ApplePCCar | | | an></span> |
| dATA-103.3.2~1</s | | | |
| pan></span> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">ApplePCCar |
| style="font-size:x | | | d16ATA-113~2</spa |
| -small">AppleRTL81 | | | n></span> |
| 39Ethernet-141~1< | | | |
| /span></span> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">ApplePCCar |
| style="font-size:x | | | dATA-103.3.2~2</s |
| -small">AppleSym8x | | | pan></span> |
| x-122.3.1~1</span | | | |
| ></span> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">AppleRTL81 |
| style="font-size:x | | | 39Ethernet-141~2< |
| -small">AppleTherm | | | /span></span> |
| al-101.3.2~1</spa | | | |
| n></span> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">AppleSym8x |
| style="font-size:x | | | x-122.3.1~2</span |
| -small">AppleVIA-1 | | | ></span> |
| 51.0.1~1</span></ | | | |
| span> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">AppleTherm |
| style="font-size:x | | | al-101.3.2~2</spa |
| -small">CarbonHead | | | n></span> |
| ers-9G55~1</span> | | | |
| </span> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">AppleVIA-1 |
| style="font-size:x | | | 51.0.1~2</span></ |
| -small">CommonCryp | | | span> |
| to-32207~1</span> | | | |
| </span> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">CarbonHead |
| style="font-size:x | | | ers-9G55~2</span> |
| -small">CrackLib-3 | | | </span> |
| 0889~1</span></sp | | | |
| an> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">CommonCryp |
| style="font-size:x | | | to-32207~2</span> |
| -small">Csu-75~1< | | | </span> |
| /span></span> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">CoreOSMake |
| -small">ICU-8.11.4 | | | files-52~3</span> |
| ~1</span></span> | | | </span> |
| | | | |
| </div> | | | </div> |
| | | | |
| <div> | | | <div> |
| | | | |
| <span | | | <span |
| style="font-family | | | style="font-family |
| :arial,sans-serif" | | | :arial,sans-serif" |
| ><span | | | ><span |
| style="font-size:x | | | style="font-size:x |
| -small">ICU_debug | | | -small">ICU-8.11.4 |
| -8.11.4~1</span>< | | | ~2</span></span> |
| /span> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">ICU_debug |
| -small">ICU_profi | | | -8.11.4~2</span>< |
| le-8.11.4~1</span | | | /span> |
| ></span> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">ICU_profi |
| -small">IOACPIFami | | | le-8.11.4~2</span |
| ly-5~1</span></sp | | | ></span> |
| an> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">IOACPIFami |
| -small">IOADBFamil | | | ly-5~2</span></sp |
| y-6~1</span></spa | | | an> |
| n> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">IOADBFamil |
| -small">KeyLargoAT | | | y-6~2</span></spa |
| A-111.3.1~1</span | | | n> |
| ></span> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">KeyLargoAT |
| -small">Libcpp_ke | | | A-111.3.1~2</span |
| xt-5~1</span></sp | | | ></span> |
| an> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">Librpcsvc- |
| -small">Libm-292.4 | | | 15~2</span></span |
| ~1</span></span> | | | > |
| | | | |
| </div> | | | </div> |
| | | | |
| <div> | | | <div> |
| | | | |
| <span | | | <span |
| style="font-family | | | style="font-family |
| :arial,sans-serif" | | | :arial,sans-serif" |
| ><span | | | ><span |
| style="font-size:x | | | style="font-size:x |
| -small">Libmx-292. | | | -small">Libstreams |
| 4~1</span></span> | | | -25~2</span></spa |
| | | | n> |
| </div> | | | |
| | | | </div> |
| <div> | | | |
| | | | <div> |
| <span | | | |
| style="font-family | | | <span |
| :arial,sans-serif" | | | style="font-family |
| ><span | | | :arial,sans-serif" |
| style="font-size:x | | | ><span |
| -small">Librpcsvc- | | | style="font-size:x |
| 15~1</span></span | | | -small">SCSIHeader |
| > | | | Installer-100.0.2 |
| | | | ~2</span></span> |
| </div> | | | |
| | | | </div> |
| <div> | | | |
| | | | <div> |
| <span | | | |
| style="font-family | | | <span |
| :arial,sans-serif" | | | style="font-family |
| ><span | | | :arial,sans-serif" |
| style="font-size:x | | | ><span |
| -small">Libstreams | | | style="font-size:x |
| -25~1</span></spa | | | -small">TargetConf |
| n> | | | ig-6~3</span></sp |
| | | | an> |
| </div> | | | |
| | | | </div> |
| <div> | | | |
| | | | <div> |
| <span | | | |
| style="font-family | | | <span |
| :arial,sans-serif" | | | style="font-family |
| ><span | | | :arial,sans-serif" |
| style="font-size:x | | | ><span |
| -small">Liby-15~1 | | | style="font-size:x |
| </span></span> | | | -small">TargetConf |
| | | | ig_host-6~3</spa |
| </div> | | | n></span> |
| | | | |
| <div> | | | </div> |
| | | | |
| <span | | | <div> |
| style="font-family | | | |
| :arial,sans-serif" | | | <span |
| ><span | | | style="font-family |
| style="font-size:x | | | :arial,sans-serif" |
| -small">SCSIHeader | | | ><span |
| Installer-100.0.2 | | | style="font-size:x |
| ~1</span></span> | | | -small">Tokend-352 |
| | | | 09~2</span></span |
| </div> | | | > |
| | | | |
| <div> | | | </div> |
| | | | |
| <span | | | <div> |
| style="font-family | | | |
| :arial,sans-serif" | | | <span |
| ><span | | | style="font-family |
| style="font-size:x | | | :arial,sans-serif" |
| -small">SquirrelMa | | | ><span |
| il-29~1</span></s | | | style="font-size:x |
| pan> | | | -small">architectu |
| | | | re-254.0.5~2</spa |
| </div> | | | n></span> |
| | | | |
| <div> | | | </div> |
| | | | |
| <span | | | <div> |
| style="font-family | | | |
| :arial,sans-serif" | | | <span |
| ><span | | | style="font-family |
| style="font-size:x | | | :arial,sans-serif" |
| -small">SystemStub | | | ><span |
| s-6~1</span></spa | | | style="font-size:x |
| n> | | | -small">autozone-7 |
| | | | 7.1~2</span></spa |
| </div> | | | n> |
| | | | |
| <div> | | | </div> |
| | | | |
| <span | | | <div> |
| style="font-family | | | |
| :arial,sans-serif" | | | <span |
| ><span | | | style="font-family |
| style="font-size:x | | | :arial,sans-serif" |
| -small">TimeZoneDa | | | ><span |
| ta-16~1</span></s | | | style="font-size:x |
| pan> | | | -small">bsdmake-23 |
| | | | ~3</span></span> |
| </div> | | | |
| | | | </div> |
| <div> | | | |
| | | | <div> |
| <span | | | |
| style="font-family | | | <span |
| :arial,sans-serif" | | | style="font-family |
| ><span | | | :arial,sans-serif" |
| style="font-size:x | | | ><span |
| -small">Tokend-352 | | | style="font-size:x |
| 09~1</span></span | | | -small">bsm-13~3< |
| > | | | /span></span> |
| | | | |
| </div> | | | </div> |
| | | | |
| <div> | | | <div> |
| | | | |
| <span | | | <span |
| style="font-family | | | style="font-family |
| :arial,sans-serif" | | | :arial,sans-serif" |
| ><span | | | ><span |
| style="font-size:x | | | style="font-size:x |
| -small">adv_cmds- | | | -small">drvAppleCM |
| 119~1</span></spa | | | D646Root-104.2.2~ |
| n> | | | 2</span></span> |
| | | | |
| </div> | | | </div> |
| | | | |
| <div> | | | <div> |
| | | | |
| <span | | | <span |
| style="font-family | | | style="font-family |
| :arial,sans-serif" | | | :arial,sans-serif" |
| ><span | | | ><span |
| style="font-size:x | | | style="font-size:x |
| -small">amavisd-11 | | | -small">extenTools |
| 0.2~1</span></spa | | | -17.3~2</span></s |
| n> | | | pan> |
| | | | |
| </div> | | | </div> |
| | | | |
| <div> | | | <div> |
| | | | |
| <span | | | <span |
| style="font-family | | | style="font-family |
| :arial,sans-serif" | | | :arial,sans-serif" |
| ><span | | | ><span |
| style="font-size:x | | | style="font-size:x |
| -small">architectu | | | -small">gcc_selec |
| re-254.0.5~1</spa | | | t-66~2</span></sp |
| n></span> | | | an> |
| | | | |
| </div> | | | </div> |
| | | | |
| <div> | | | <div> |
| | | | |
| <span | | | <span |
| style="font-family | | | style="font-family |
| :arial,sans-serif" | | | :arial,sans-serif" |
| ><span | | | ><span |
| style="font-size:x | | | style="font-size:x |
| -small">autozone-7 | | | -small">libedit-11 |
| 7.1~1</span></spa | | | ~2</span></span> |
| n> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">libffi-10 |
| -small">crontabs-3 | | | ~2</span></span> |
| 4~1</span></span> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">libfs-7~2 |
| -small">cscope-14 | | | </span></span> |
| ~1</span></span> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">libpcap-18 |
| -small">curl-42~1 | | | ~2</span></span> |
| </span></span> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">libtelnet- |
| -small">cvs-39~1< | | | 7~2</span></span> |
| /span></span> | | | |
| | | | </div> |
| </div> | | | |
| | | | <div> |
| <div> | | | |
| | | | <span |
| <span | | | style="font-family |
| style="font-family | | | :arial,sans-serif" |
| :arial,sans-serif" | | | ><span |
| ><span | | | style="font-size:x |
| style="font-size:x | | | -small">libutil-11 |
| -small">cvs_wrapp | | | ~2</span></span> |
| ed-13~1</span></s | | | |
| pan> | | | </div> |
| | | | |
| </div> | | | <div> |
| | | | |
| <div> | | | <span |
| | | | style="font-family |
| <span | | | :arial,sans-serif" |
| style="font-family | | | ><span |
| :arial,sans-serif" | | | style="font-size:x |
| ><span | | | -small">objc4-371. |
| style="font-size:x | | | 2~2</span></span> |
| -small">developer | | | |
| _cmds-49~1</span> | | | </div> |
| </span> | | | |
| | | | <div> |
| </div> | | | |
| | | | <span |
| <div> | | | style="font-family |
| | | | :arial,sans-serif" |
| <span | | | ><span |
| style="font-family | | | style="font-size:x |
| :arial,sans-serif" | | | -small">pam-32.1~ |
| ><span | | | 2</span></span> |
| style="font-size:x | | | |
| -small">diffstat-5 | | | </div> |
| ~1</span></span> | | | |
| | | | <div> |
| </div> | | | |
| | | | <span |
| <div> | | | style="font-family |
| | | | :arial,sans-serif" |
| <span | | | ><span |
| style="font-family | | | style="font-size:x |
| :arial,sans-serif" | | | -small">pbx_jamfi |
| ><span | | | les-874~2</span>< |
| style="font-size:x | | | /span> |
| -small">doc_cmds- | | | |
| 47~1</span></span | | | </div> |
| > | | | |
| | | | <div> |
| </div> | | | |
| | | | <span |
| <div> | | | style="font-family |
| | | | :arial,sans-serif" |
| <span | | | ><span |
| style="font-family | | | style="font-size:x |
| :arial,sans-serif" | | | -small">removefile |
| ><span | | | -11~2</span></spa |
| style="font-size:x | | | n> |
| -small">drvAppleCM | | | |
| D646Root-104.2.2~ | | | </div> |
| 1</span></span> | | | |
| | | | <div> |
| </div> | | | |
| | | | <span |
| <div> | | | style="font-family |
| | | | :arial,sans-serif" |
| <span | | | ><span |
| style="font-family | | | style="font-size:x |
| :arial,sans-serif" | | | -small">xnu-1228.1 |
| ><span | | | 2.14~2</span></sp |
| style="font-size:x | | | an> |
| -small">enscript-1 | | | |
| 5~1</span></span> | | | </div> |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">expat-6~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">extenTools | | | |
| -17.3~1</span></s | | | |
| pan> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">fetchmail- | | | |
| 30~1</span></span | | | |
| > | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">file-23~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">file_cmds | | | |
| -188~1</span></sp | | | |
| an> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">files-530. | | | |
| 1.5~1</span></spa | | | |
| n> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">flex-20.3 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">gcc_selec | | | |
| t-66~1</span></sp | | | |
| an> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">glibtool-1 | | | |
| 2~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">gm4-12~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">gnudiff-14 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">gnumake-11 | | | |
| 9~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">gnuzip-25 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">gperf-4~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">graphviz-6 | | | |
| 22~1</span></span | | | |
| > | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">grep-24~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">groff-31~ | | | |
| 1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">hfs-165.1 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">jam-851~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">keymgr-18 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">ksh-13~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">ld64-77.1 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">less-20~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">libedit-11 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">libffi-10 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">libfs-7~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">libiconv-2 | | | |
| 4~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">libmd-2~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">libpcap-18 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">libtelnet- | | | |
| 7~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">libutil-11 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">lsof-33~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">lukemftp-1 | | | |
| 1~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">lukemftpd- | | | |
| 33~1</span></span | | | |
| > | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">mail_cmds | | | |
| -22~1</span></spa | | | |
| n> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">man-12~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">misc_cmds | | | |
| -23~1</span></spa | | | |
| n> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">nano-4~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">nasm-13~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">netcat-7~ | | | |
| 1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">objc4-371. | | | |
| 2~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">openmpi-5 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">pam-32.1~ | | | |
| 1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">passwordse | | | |
| rver_saslextra-11 | | | |
| 8.1~1</span></spa | | | |
| n> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">patch_cmd | | | |
| s-11~1</span></sp | | | |
| an> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">pb_makefi | | | |
| les-128~1</span>< | | | |
| /span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">pbx_jamfi | | | |
| les-874~1</span>< | | | |
| /span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">procmail-1 | | | |
| 1~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">rcs-13~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">removefile | | | |
| -11~1</span></spa | | | |
| n> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">rsync-35.2 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">security_ | | | |
| authtrampoline-325 | | | |
| 34~1</span></span | | | |
| > | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">security_ | | | |
| certificates-36075 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">srm-6~1</ | | | |
| span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">stmalloc-4 | | | |
| ~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">sudo-28~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">swig-4~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">system_co | | | |
| nfig-49~1</span>< | | | |
| /span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">tcp_wrapp | | | |
| ers-18~1</span></ | | | |
| span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">tcsh-60~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">texi2html- | | | |
| 5~1</span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">text_cmds | | | |
| -69~1</span></spa | | | |
| n> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">uucp-10~1 | | | |
| </span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">vim-39~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">xelf-1~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">zip-9~1</ | | | |
| span></span> | | | |
| | | | |
| </div> | | | |
| | | | |
| <div> | | | |
| | | | |
| <span | | | |
| style="font-family | | | |
| :arial,sans-serif" | | | |
| ><span | | | |
| style="font-size:x | | | |
| -small">zsh-48~1< | | | |
| /span></span> | | | |
| | | | |
| </div> | | | |
+--------------------+--------------------+--------------------+--------------------+
**4-pass**
Again, all the projects will be built (or not). As a result, nothing will be built successfully according to packageRoots:
`/opt/local/share/darwinbuild/packageRoots `
`Archive tool: tar (GNU tar) 1.15.1`
`*** Packaging Headers`
`*** Packaging Roots`
Finally, we reach the point where no buildable (without alteration, patch, etc..) dependency is missing.
Let's also now add [PureFoundation](/archive/developers/PureFoundation.md) in *[...]/9J61/BuildRoot* folder with: `tar xzf ../../../hg/Roots/pd/PureFoundation.root.tar.gz`.
And go for a 5 round..
#### 5-pass
After trying again to build all projects, it appears that 6 additional projects have been successfully built:
Let's load them, and be prepare for pass six.
It is also plausible that many solutions and pseudo-solutions below will be needed for the next passes. Everything has been logged since the beginning, some useful `grep' sequences based on the available solutions against the log files could also be done in order to make them build.
#### 6-pass
Indeed, nothing more succeed at this stage.
Enjoy the number of error to fix..
`grep -i error Logs/*/*6 | wc -l`
` 196493`
`grep -i warning Logs/*/*6 | wc -l`
` 38007`
**Errata:**
it should be loaded with -load -headers:
for Y in `ls Packages/*hdrs*.tar.gz | awk -F "." '{print $1}' | sed 's/Packages///g'`; do
darwinbuild -load -headers $Y
done
Let's first look the projects which do not have any binaryroot and cannot be built.
- In green are the projects which have enough solution(s) available in order to built successfully the project (on 9J61)
-
- In red are the projects where source not available or impossible to build (e.g., CFNetwork on darwin 9).
-
-AppleMacRISC4PE
-AppleOnboardAudio
-AppleUSBAudio
-AppleUSBCDCDriver
-AppleUSBIrDA
-BootCache
-BootX
-CFNetwork
-CPAN
-CPANInternal
-ChatServer
-CyrusIMAP
-DSPasswordServerPlugin
-DynamicPowerStep
-FastCGI
-FirewallTool
-IOATABlockStorage
-IOATAPIProtocolTransport
-IOBDStorageFamily
-IOFWDVComponents
-IOFireWireIP
-IOFireWireSerialBusProtocolTransport
-IOSCSIArchitectureModelFamily
-JavaScriptCore
-JavaScriptGlue
-Libc_debug
-Libc_profile
-OpenAL
-OpenDirectory
-OpenLDAP
-OpenSSH
-PyRSS2Gen
-RubyOnRails
-SecurityTool
-SpamAssassin
-Twisted
-TwistedWords
-TwistedXish
-VirtualAudioDriver
-WebCore
-X11fonts
-X11libs
-X11proto
-apache
-apache_mod_bonjour
-apache_mod_fastcgi
-apache_mod_hfs_apple
-apache_mod_perl
-apache_mod_php
-apache_mod_php4
-autofs
-cddafs
-clamav
-configd_executables
-configd_plugins
-cups
-disklabel
-efax
-efiboot
-gdb
-gnuserv
-gpt
-gssd
-gutenprint
-iodbc
-ipsec
-ipv6configuration
-isoutil
-libsecurity_agent
-libsecurity_apple_csp
-libsecurity_apple_cspdl
-libsecurity_apple_file_dl
-libsecurity_apple_x509_cl
-libsecurity_apple_x509_tp
-libsecurity_asn1
-libsecurity_authorization
-libsecurity_cdsa_plugin
-libsecurity_cdsa_utils
-libsecurity_checkpw
-libsecurity_cms
-libsecurity_codesigning
-libsecurity_dotmacdl
-libsecurity_filedb
-libsecurity_filevault
-libsecurity_keychain
-libsecurity_ldap_dl
-libsecurity_manifest
-libsecurity_mds
-libsecurity_ocspd
-libsecurity_pkcs12
-libsecurity_sd_cspdl
-libsecurity_smime
-libsecurity_ssl
-libsecurityd
-libstdcxx_SUPanWheat
-mDNSResponderSystemLibraries
-mailman
-msdosfs
-net_snmp
-notify
-ntp
-pam_modules
-passwordserver_saslkerberos
-portmap
-postfix
-pyOpenSSL
-pyobjc
-python
-python23
-python_dateutil
-python_modules
-ruby
-ruby_dnssd
-ruby_libxml
-security_certtool
-security_crlrefresh
-security_dotmac_tp
-security_ocspd
-security_privportserver
-security_systemkeychain
-securityd
-smb
-subversion
-svk
-syslog
-tcl
-tcl_ext
-tcl_tk
Let's make another pass (7th) again after loading all these built projects.
At this stage, the state of the buildroot is not "clean" anymore, some headers have been copied or linked manually from a location to another (and even from outside the buildroot sometimes), etc..
#### 7 pass
The results are really great, more and more projects are built again (see results of packageRoots):
AppleAPIC-13~7 AppleDisplays-1140.0.5~7 AppleFileSystemDriver-12~7 AppleHWSensor-190~7 AppleIntel8255x-19~7 AppleKeyLargo-172.3.1~7 AppleSMBIOS-38~7 AppleUSBAudio-264.2.10~7 BootCache-43.12~13 BootX-81~7 CF-476.18~7 DirectoryServiceMIG-514.25~7 IOATAFamily-201.0.1~7 IOAudioFamily-169.4.3~7 IOCDStorageFamily-39~7 IODVDStorageFamily-26~7 IOFireWireFamily-347.4.0~7 IOFireWireIP-177.4.0~7 IOFireWireSBP2-198.4.0~7 IOGraphics-305.14~7 IOI2CFamily-111.0.2~7 IOPCCardFamily-48~7 IOPCIFamily-110~7 IOStorageFamily-92.9~7 Libinfo-278.0.3~7 Libnotify-36~7 Libsyscall-1228.12.14~7 UserNotification-21~7 VirtualAudioDriver-258.3.1~7 diskdev_cmds-421.8~7 distcc-881~7 gpt-7~7 libresolv-25.0.2~7 libsecurity_checkpw-29159~7 portmap-26~7 shell_cmds-118~7 top-39~7
__
__
__Random notes:__ In fact we have a workaround since 9F33pd1 which will soon be used as many projects are related to the following problem(s) [...].
****
`/System/Library/Frameworks/Security.framework/Headers/SecBase.h:74: error: syntax error before 'SecKeychainAttrType'`
`/System/Library/Frameworks/Security.framework/Headers/SecBase.h:77: error: syntax error before '}' token`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h:78: error: syntax error before 'SecAuthenticationType'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h:117: error: syntax error before 'SecProtocolType'`
**Projects impacted:**
DynamicPowerStep KerberosHelper OpenSSH SecurityTool apache_mod_bonjour bootp cddafs configd_executables ipsec ipv6configuration libsecurity_apple_x509_tp libsecurity_asn1 libsecurity_cdsa_utilities libsecurity_cdsa_utils libsecurity_cms libsecurity_dotmacdl libsecurity_filevault libsecurity_ldap_dl libsecurity_manifest libsecurity_pkcs12 libsecurity_smime libsecurity_ssl modemccl ppp samba security_certtool security_ocspd security_systemkeychain securityd
So let's use the workaround which consists of simply adding. This is a dirty workaround because nobody should alter any header files.
Let's go for the 8th round, we're not tired at all.
#### 8 pass
build build!
### 9 pass
o/
OpenSSH-95.1.5~9 cctools-667.3~9 cctools_ofiles-667.3~9 gssd-23~9 libdyld-97.1~9 libsecurity_agent-32091.1~9 libsecurity_ocspd-29518~9 mDNSResponderSystemLibraries-176.3~9 network_cmds-307.1.1~9 notify-16~9 remote_cmds-13.0.2~9 security_certtool-31828~9
..[...]
#### 10 pass
security_crlrefresh-31832~10
+--------------------------------------+--------------------------------------+
| <div style="text-align:center"> | <span |
| | style="font-weight:bold">Security(d) |
| <span | and other related projects which not |
| style="font-weight:bold">Remaining | yet build</span> |
| projects</span> | |
| | |
| </div> | |
| | |
| <span | |
| style="font-weight:bold"></span> | |
| <div style="text-align:center"> | |
| | |
| (estimation) | |
| | |
| </div> | |
+--------------------------------------+--------------------------------------+
| Image 9J6111pass.png | Image securitystuff.png |
+--------------------------------------+--------------------------------------+
Below are errors related to the project described just above.
According to the map, we should probably begin to fix first :
libsecurity_cdsa_utilities
which unblocks libsecurity_apple_x509_tp, libsecurity_apple_x509_cl, SecurityTool, libsecurity_cms, libsecurity_ssl, libsecurity_smime,
Problematic point is all the project linked (depending) on a non available project.
#### 11-pass
After running another pass (11 iirc..), more projects are built:
AppleRS232Serial-130.2.7~11
AppleSCCSerial-132.4.2~11
AppleUSBCDCDriver-3212.4.1~11
AppleUSBIrDA-144.4.0~11
IOSerialFamily-32.2~11
SecurityTokend-32363~11
SmartCardServices-34733~11
disklabel-2~11
libsecurity_cdsa_client-32432~11
libsecurity_cssm-32993~11
libsecurity_filedb-32868~11
libsecurity_utilities-36433~16
Which satisfy dependency for:
libsecurity_mds
libsecurity_apple_file_dl
...
let's fix more and more..
After applying some patches and rebuild some dependents where their dependencies just have been patched, the picture looks like:

The state is beyond the 12th pass now..
------------------------------------------------------------------------
**Problem:** The Mac OS X platform is missing...
**Solution: **It is more than recommended to avoid using HFS+ as the filesystem of your BuildRoot volume with DarwinBuild (precisely Xcode in this case). An UFS disk image works, alternatively you can also *fool* Xcode using NFS as described [there](/archive/developers/Using%20DarwinBuild/DarwinBuild.md#workaround-darwinbuild-ticket-1-no-longer-needed). Also note that on Mac OS X 10.5, there is a bug in `hdiutil' which prevents to create large UFS disk image (around 12g max). The trick is to use a Tiger machine to create a larger image.
Example with an UFS disk image:
hdiutil create -size 30g -type UDIF -fs UFS -volname Builds -attach Builds.dmg
The cause is Xcode 3.1 running in a chroot on not-UFS.
**Fixed: **This workaround is **no longer needed** since on the [Darwinbuild website](http://darwinbuild.macosforge.org/), we can read (news from 2009/04/17): "*The latest revision of trunk has support for sparsebundles and NFS Loopback in order to avoid the problems with xcodebuild inside of chroots. If you do not change the way you use darwinbuild, you will start seeing the sparsebundle storage. Nothing else is needed and Xcode-based projects will build on whatever filesyste**m you have.*"
**Solution:** `darwinbuild -load TargetConfig` (this will download a binary root)
------------------------------------------------------------------------
### AppleDisplay
darwinbuild AppleDisplay
#### 9J61 (ok)
****
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:25:26: error: IOKit/system.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:26:25: error: IOKit/IOLib.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:27:38: error: IOKit/graphics/IODisplay.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:28:39: error: IOKit/IODeviceTreeSupport.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:29:36: error: IOKit/IOPlatformExpert.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:30:49: error: IOKit/ndrvsupport/IONDRVFramebuffer.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:31:29: error: IOKit/IOMessage.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:32:38: error: IOKit/pwr_mgt/RootDomain.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:33:26: error: IOKit/assert.h: No such file or directory`
`/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/AppleOnboardDisplay.cpp:36:20: error: stddef.h: No such file or directory`
**Solution:? **(resolved near pass 7)
**Problem:**` /SourceCache/AppleDisplays/AppleDisplays-1140.0.5/AppleOnboardDisplay/IVAD.h:27:29: error: libkern/OSTypes.h: No such file or directory`
**Solution:** ? (resolved near pass 7)
------------------------------------------------------------------------
### AppleMacRISC4PE
#### 9J61
**Problem:**
`MacRISC4PE.cpp:183: error: 'kUniNRevision3_2_1' was not declared in this scope`
`MacRISC4CPU.cpp:488: error: 'kUniNNormal' was not declared in this scope`
`MacRISC4CPU.cpp:551: error: 'kUniNSave' was not declared in this scope`
`MacRISC4CPU.cpp:557: error: 'kUniNSleep' was not declared in this scope`
`U3.cpp:91: error: 'kUniNVersion' was not declared in this scope`
`U3.cpp:93: error: 'kUniNVersion3' was not declared in this scope`
`U3.cpp:136: error: 'kU3ToggleRegister' was not declared in this scope`
`[...]`
`U3.cpp:1268: error: 'kU3API_DARTExcp' was not declared in this scope`
**Solution:** ?
**Problem:** `IOPlatformPlugins/IOPlatformPlugin.cpp:356: error: 'kIOPPluginForceUpdateKey' was not declared in this scope`
`IOPlatformPlugins/IOPlatformPlugin.cpp:357: error: 'kIOPPluginForceUpdateAllKey' was not declared in this scope`
`IOPlatformPlugins/IOPlatformPlugin.cpp:358: error: 'kIOPPluginForceSensorCurValKey' was not declared in this scope`
`IOPlatformPlugins/IOPlatformPlugin.cpp:359: error: 'kIOPPluginReleaseForcedSensorKey' was not declared in this scope`
`IOPlatformPlugins/IOPlatformPlugin.cpp:360: error: 'kIOPPluginForceCtrlTargetValKey' was not declared in this scope`
`IOPlatformPlugins/IOPlatformPlugin.cpp:361: error: 'kIOPPluginReleaseForcedControlKey' was not declared in this scope`
`IOPlatformPlugins/IOPlatformPlugin.cpp:362: error: 'kIOPPluginForceCtrlLoopMetaStateKey' was not declared in this scope`
`IOPlatformPlugins/IOPlatformPlugin.cpp:363: error: 'kIOPPluginReleaseForcedCtrlLoopKey' was not declared in this scope`
**Solution:** ?
------------------------------------------------------------------------
### AppleOnboardAudio
#### 9J61
**Problem:** `HALPlugin/AOAHALPlugin.h:44:41: error: CoreAudio/AudioDriverPlugIn.h: No such file or directory`
**Solution: ** ?
See <http://darwinbuild.macosforge.org/trac/ticket/82>
------------------------------------------------------------------------
### AppleRAID
#### 9J61
**Problem:** /SourceCache/AppleRAID/AppleRAID-3.0.19/AppleRAID.h:60:27: error: IOKit/IOTypes.h: No such file or directory/SourceCache/AppleRAID/AppleRAID-3.0.19/AppleRAID.h:61:29: error: IOKit/IOService.h: No such file or directory /SourceCache/AppleRAID/AppleRAID-3.0.19/AppleRAID.h:62:30: error: IOKit/IOWorkLoop.h: No such file or directory /SourceCache/AppleRAID/AppleRAID-3.0.19/AppleRAID.h:63:33: error: IOKit/IOEventSource.h: No such file or directory... etc
**Solution:** related to kernel headers and iokituser headers
**Problem:** /SourceCache/AppleRAID/AppleRAID-3.0.19/artest.c:38:30: error: MediaKit/MKMedia.h: No such file or directory
/SourceCache/AppleRAID/AppleRAID-3.0.19/artest.c:39:36: error: MediaKit/MKMediaAccess.h: No such file or directory
**Solution:** ???
------------------------------------------------------------------------
### AppleRS232Serial
#### 9J61
**Problem:** `AppleRS232Serial.cpp:31:39: error: IOKit/serial/IOSerialKeys.h: No such file or directory`
`AppleRS232Serial.h:86:45: error: IOKit/serial/IOSerialDriverSync.h: No such file or directory`
`AppleRS232Serial.h:87:50: error: IOKit/serial/IORS232SerialStreamSync.h: No such file or directory`
**Solution:** Fixed at between pass 10 and pass 11 with Apple16X50Serial fix
------------------------------------------------------------------------
### AppleUSBCDCDriver
#### 9J61 (ok)
**Problem:** /SourceCache/AppleUSBCDCDriver/AppleUSBCDCDriver-3212.4.1/AppleUSBCDC/Classes/AppleUSBCDC.cpp:47:39: error: IOKit/serial/IOSerialKeys.h: No such file or directory
/SourceCache/AppleUSBCDCDriver/AppleUSBCDCDriver-3212.4.1/AppleUSBCDC/Classes/AppleUSBCDC.cpp:48:45: error: IOKit/serial/IOSerialDriverSync.h: No such file or directory
/SourceCache/AppleUSBCDCDriver/AppleUSBCDCDriver-3212.4.1/AppleUSBCDC/Classes/AppleUSBCDC.cpp:49:50: error: IOKit/serial/IOModemSerialStreamSync.h: No such file or directory
/SourceCache/AppleUSBCDCDriver/AppleUSBCDCDriver-3212.4.1/AppleUSBCDC/Classes/AppleUSBCDC.cpp:50:50: error: IOKit/serial/IORS232SerialStreamSync.h: No such file or directory
**Solution:** Fixed at between pass 10 and pass 11 with Apple16X50Serial fix
------------------------------------------------------------------------
### AppleUSBIrDA
#### 9J61 (ok)
AppleUSBIrDA/AppleUSBIrDA.cpp:40:39: error: IOKit/serial/IOSerialKeys.h: No such file or directory
AppleUSBIrDA/AppleUSBIrDA.cpp:41:50: error: IOKit/serial/IOModemSerialStreamSync.h: No such file or directory
AppleUSBIrDA/AppleUSBIrDA.cpp:42:50: error: IOKit/serial/IORS232SerialStreamSync.h: No such file or directory
In file included from AppleUSBIrDA/AppleUSBIrDA.cpp:46:
AppleUSBIrDA/AppleUSBIrDA.h:27:45: error: IOKit/serial/IOSerialDriverSync.h: No such file or directory
**Solution:** Fixed at between pass 10 and pass 11 with Apple16X50Serial fix
------------------------------------------------------------------------
### Apple16X50Serial
#### 9J61 (ok)
**Problem:** `/SourceCache/Apple16X50Serial/Apple16X50Serial-19.3/Apple16X50UARTSync.h:31:64: error: IOKit/serial/IORS232SerialStreamSync.h: No such file or directory`
`/SourceCache/Apple16X50Serial/Apple16X50Serial-19.3/Apple16X50Queue.h:23:45: error: IOKit/serial/IOSerialStreamSync.h: No such file or directory`
`/SourceCache/Apple16X50Serial/Apple16X50Serial-19.3/Apple16X50PCCard.cpp:26:39: error: IOKit/serial/IOSerialKeys.h: No such file or directory`
**Solution:**
`chroot BuildRoot`
`mkdir /XCD/SY/Library/Frameworks/Kernel.framework/Versions/A/PrivateHeaders/IOKit/serial`
`cp SourceCache/IOSerialFamily/IOSerialFamily-32.2/IOSerialFamily.kmodproj/*h /XCD/SY/Library/Frameworks/Kernel.framework/Versions/A/PrivateHeaders/IOKit/serial `
then
`** BUILD SUCCEEDED **`
`[...]`
`Apple16X50Serial - 6 files registered.`
------------------------------------------------------------------------
### BootCache
#### 9J61
**Problem:** `error: couldn't exec /XCD/loper/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings: No such file or directory`
`This is related to the availability of ruby (copystrings is a ruby script)`.
**Solution: **to have ruby. **Please let us know if you have a solution.**
------------------------------------------------------------------------
### CF
`darwinbuild CF`
#### 9J61
**Problem:** `CFMessagePort.c:38:28: error: bootstrap_priv.h: No such file or directory`
**Solution:** <span style="font-family:courier new"><span style="color:rgb(153,153,153)">darwinbuild launchd && darwinbuild -load launchd</span></span>
#### 9G55
**** `/usr/include/sys/stat.h:75:26: In file included from CFBundle.c:40error: Availability.h: No such file or directory`
/usr/include/sys/stat.h:75:26: error: Availability.h: No such file or directory
****
#### 9F33 (ok)
****

**Problem: **In fact, CF-lite appears to missing many functions. Although the CF-lite built just above is enough for [PureDarwin nano](/archive/users/PureDarwin-Nano.md), it won't be sufficient in a full PureDarwin release since many vital daemons may use these missing functions. Some have been already patched or can be short-circuited with an empty body, but others clearly need some code inside their body.
For more information about the differences between the CF from Mac OS X and the CF-lite from DarwinBuild (the one we use) which explain why some expected symbols are missing, please take a look at [CF-lite](/archive/developers/CFLite.md) page.
This is a non exhaustive list of missing symbols found, from darwinbuild compilation or at runtime.
``
`com.apple.configd[28]: Referenced from: /System/Library/SystemConfiguration/PowerManagement.bundle/Contents/MacOS/PowerManagement `
`com.apple.configd[28]: Expected in: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
`
``
``
` Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security`
` Expected in: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation`
**
**
**Solution: **Build using the PureDarwin .plist, which includes patches to resolve most of these problems.
------------------------------------------------------------------------
### CFNetwork
#### 9J61
CFNetwork is not opensource in darwin 9 but in darwin 8. See <http://darwinbuild.macosforge.org/trac/ticket/16>
**problem:** `*** Fetching Sources ...`
`Downloading http://src.macosforge.org/Projects//CFNetwork-219.tar.gz ...`
`Downloading http://src.macosforge.org/Patches//CFNetwork-219.tar.gz ...`
`*** Copying Sources ...`
`tar (child): /Users/aladin/PureDarwin/darwinbuild/9J61/Sources/CFNetwork-219.tar.gz: Cannot open: No such file or directory`
`tar (child): Error is not recoverable: exiting now`
`tar: Child returned status 2`
`tar: Error exit delayed from previous errors`
`make: *** No rule to make target `install'. Stop.`
**solution:** The version in the original *9J61.plist* seems to not match the available sources.
CFNetwork-129.20 <- is the latest available at this time, 9J61pd1 is not yet out, but the version could be downgraded in any plist which inherits from 9J61.
**Problem:** cc1: error: unrecognized command line option "-Wno-precomp"
**Solution:** Patch baby patch!
****
------------------------------------------------------------------------
### CFOpenDirectory
`darwinbuild CFOpenDirectory`
__Notes:__ CFOpenDirectory is needed by `passwd'
#### 9J61 ??
#### 9G55
**`error: couldn't exec /XCD/loper/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings: No such file or directory`**
**Solution: **related implicitly (but mandatory) to ruby as explained later below.
#### 9F33
**Problem:` `dyld: Library not loaded: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation**
**Referenced from: /System/Library/PrivateFrameworks/OpenDirectory.framework/Versions/A/OpenDirectory**
**Reason: image not found**
**Solution: **
------------------------------------------------------------------------
### CPAN
#### 9J61pd1
/usr/bin/perl ../xsubpps/xsubpp-5.8.0 -noprototypes -typemap /System/Library/Perl/5.8.8/ExtUtils/typemap AppleEvents.xs > AppleEvents.xsc && mv AppleEvents.xsc AppleEvents.c
cc -c -pipe -no-cpp-precomp -arch ppc -arch i386 -I/Developer/Headers/FlatCarbon/ -arch ppc -arch i386 -g -pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -Wdeclaration-after-statement -I/usr/local/include -fpascal-strings -O3 -DVERSION="1.32" -DXS_VERSION="1.32" "-I/System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE" AppleEvents.c
In file included from AppleEvents.xs:63:
../Carbon.h:67:20: error: In file included from AppleEvents.xs:63:
../Carbon.h:67:20: error: Events.h: No such file or directory
Events.h: No such file or directory
../Carbon.h:68:21: ../Carbon.h:68:21: error: error: Dialogs.h: No such file or directory
Dialogs.h: No such file or directory
../Carbon.h:69:19: ../Carbon.h:69:19:error: Files.h: No such file or directoryerror:
Files.h: No such file or directory
../Carbon.h:70:19: ../Carbon.h:70:19:error: Types.h: No such file or directoryerror:
Types.h: No such file or directory
../Carbon.h:71:31: ../Carbon.h:71:31:error: ConditionalMacros.h: No such file or directoryerror:
ConditionalMacros.h: No such file or directory
------------------------------------------------------------------------
### CPANInternal
9J61
Problem: WARNING: YAML: Prerequisite YAML isn't installed
WARNING: ExtUtils::ParseXS: Prerequisite ExtUtils::ParseXS isn't installed
WARNING: Archive::Tar: Prerequisite Archive::Tar isn't installed
ERRORS/WARNINGS FOUND IN PREREQUISITES. You may wish to install the versions
of the modules indicated above before proceeding with this installation.
------------------------------------------------------------------------
### DSPasswordServerPlugin
#### 9J61
**Problem:** `/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:56:24: error: sasl/sasl.h: No such file or directory`
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:57:28: error: sasl/saslutil.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:65:40: error: DirectoryServiceCore/CBuff.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:66:44: error: DirectoryServiceCore/CDataBuff.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:67:49: error: DirectoryServiceCore/CAttributeList.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:68:47: error: DirectoryServiceCore/SharedConsts.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:69:45: error: DirectoryServiceCore/PluginData.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:70:50: error: DirectoryServiceCore/CDSServerModule.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.h:71:46: error: DirectoryServiceCore/CSharedData.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:43:50: error: DirectoryServiceCore/ServerModuleLib.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:45:42: error: DirectoryServiceCore/CRCCalc.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:47:45: error: DirectoryServiceCore/CPlugInRef.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:48:44: error: DirectoryServiceCore/DSCThread.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:49:44: error: DirectoryServiceCore/CContinue.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:50:51: error: DirectoryServiceCore/DSEventSemaphore.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:51:51: error: DirectoryServiceCore/DSMutexSemaphore.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:53:42: error: DirectoryServiceCore/DSUtils.h: No such file or directory
/SourceCache/DSPasswordServerPlugin/DSPasswordServerPlugin-208.5/CPSPlugIn.mm:54:47: error: DirectoryServiceCore/PrivateTypes.h: No such file or directory
**Solution:** See patch.
------------------------------------------------------------------------
### CyrusIMAP
#### 9J61pd1 (ok)
**Solution: **echo '
#!/bin/sh
echo "ProductName: PureDarwin"
echo "ProductVersion: 10.5.7"
echo "BuildVersion: 9J61"' > BuildRoot/usr/bin/sw_vers
**Problem: **missing *sasl.h
**Solution:** mkdir -p BuildRoot/usr/include/sasl
cp BuildRoot/SourceCache/passwordserver_sasl/passwordserver_sasl-118.1/cyrus_sasl/include/*h BuildRoot/usr/include/sasl
------------------------------------------------------------------------
### DirectoryService
darwinbuild DirectoryService
#### 9J61 ??
#### 9F33
**Problem:** `error: couldn't exec /usr/sbin/dtrace: No such file or directory`
**Solution:** Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then build dtrace first:
<span style="font-family:courier new,monospace"><span style="font-size:small">darwinbuild dtrace && darwinbuild -load dtrace && </span></span>`darwinbuild DirectoryService`
**Problem:** `/usr/sbin/dtrace -h -s Threads/dslockstat.d -o "/private/var/tmp/DirectoryService/DirectoryService-514.23.obj/DirectoryService.build/API Framework.build/DerivedSources/dslockstat.h"`
`dtrace(13670) malloc: *** error for object 0x116310: Non-aligned pointer being freed (2)`
`*** set a breakpoint in malloc_error_break to debug`
`dtrace(13670) malloc: *** error for object 0x116310: Non-aligned pointer being freed (2)`
`*** set a breakpoint in malloc_error_break to debug`
`dtrace(13670) malloc: *** error for object 0x116310: Non-aligned pointer being freed (2)`
`*** set a breakpoint in malloc_error_break to debug`
**Solution:** **Please, let us know if you have one.**
**Problem:** `/private/var/tmp/DirectoryService/DirectoryService-514.23.obj/DirectoryService.build/API Framework.build/DerivedSources/dslockstat.h:36: error: expected unqualified-id before 'long'`
`/private/var/tmp/DirectoryService/DirectoryService-514.23.obj/DirectoryService.build/API Framework.build/DerivedSources/dslockstat.h:36: error: expected `)' before 'long'`
`/private/var/tmp/DirectoryService/DirectoryService-514.23.obj/DirectoryService.build/API Framework.build/DerivedSources/dslockstat.h:38: error: expected unqualified-id before 'long'`
`/private/var/tmp/DirectoryService/DirectoryService-514.23.obj/DirectoryService.build/API Framework.build/DerivedSources/dslockstat.h:38: error: expected `)' before 'long'`
**Solution:** ...
------------------------------------------------------------------------
### DirectoryServiceDaemon
`darwinbuild ``DirectoryServiceDaemon`
#### 9J61
#### 9F33
**Problem:** `/SourceCache/DirectoryServiceDaemon/DirectoryService-514.23/PlugIns/Common/CDSAuthParams.h:28:37: error: PasswordServer/AuthFile.h: No such file or directory`
`/SourceCache/DirectoryServiceDaemon/DirectoryService-514.23/PlugIns/Common/CDSAuthParams.h:92: error: 'PWGlobalAccessFeatures' does not name a type`
`/SourceCache/DirectoryServiceDaemon/DirectoryService-514.23/PlugIns/Common/CDSAuthParams.h:93: error: 'PWGlobalMoreAccessFeatures' does not name a type`
**Solution:** `cp -R BuildRoot/System/Library/PrivateFrameworks/PasswordServer.framework BuildRoot/XCD/SY/Library/PrivateFrameworks`
**Problem:** `/SourceCache/DirectoryServiceDaemon/DirectoryService-514.23/Server/DirServiceMain.cpp:61:25: error: XSEventPort.h: No such file or directory`
****
------------------------------------------------------------------------
### FastCGI
#### 9J61
(cd gems && /usr/bin/gem install --install-dir /private/var/tmp/FastCGI/FastCGI-4.root/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8 --local --include-dependencies --rdoc fcgi -- with-fcgi-dir=/private/var/tmp/FastCGI/FastCGI-4.root/usr)
/bin/sh: /usr/bin/gem: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
make[1]: *** [install-ruby-binding] Error 126
------------------------------------------------------------------------
### ICU (ok)
#### 9J61 (ok)
see n-pass.
#### 9F33pd1 (ok)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9F33pd1
<span style="font-family:courier new;font-size:12px"><span style="font-family:Arial;font-size:13px">The plist file above contains a workaround that tend to avoid an error related to <http://darwinbuild.macosforge.org/trac/ticket/38> .</span></span>
------------------------------------------------------------------------
### IOATAPIProtocolTransport
#### 9J61
Problem: IOATAPIProtocolTransport.cpp:33:50: error: IOKit/scsi/SCSICommandOperationCodes.h: No such file or directory
IOATAPIProtocolTransport.cpp:34:33: error: IOKit/scsi/SCSITask.h: No such file or directory
IOATAPIProtocolTransport.cpp:35:107: error: IOKit/scsi/SCSITaskDefinition.h: No such file or directory
IOATAPIProtocolTransport.h:50:51: error: IOKit/storage/ata/IOATAStorageDefines.h: No such file or directory
IOATAPIProtocolTransport.h:53:47: error: IOKit/scsi/IOSCSIProtocolServices.h: No such file or directory
------------------------------------------------------------------------
### IOBDBlockStorageDevice
#### 9J61
**Problem:** /SourceCache/IOBDStorageFamily/IOBDStorageFamily-6/IOBDBlockStorageDevice.cpp:24:50: error: IOKit/storage/IOBDBlockStorageDevice.h: No such file or directory
/SourceCache/IOBDStorageFamily/IOBDStorageFamily-6/IOBDBlockStorageDriver.cpp:24:50: error: IOKit/storage/IOBDBlockStorageDriver.h: No such file or directory
/SourceCache/IOBDStorageFamily/IOBDStorageFamily-6/IOBDBlockStorageDriver.cpp:25:37: error: IOKit/storage/IOBDMedia.h: No such file or directory
------------------------------------------------------------------------
### IOFireWireSerialBusProtocolTransport
9J61
**Problem:** /SourceCache/IOFireWireSerialBusProtocolTransport/IOFireWireSerialBusProtocolTransport-152.0.2/IOFireWireSerialBusProtocolTransport.h:42:47: error: IOKit/scsi/IOSCSIProtocolServices.h: No such file or directory
Where can we found it? except in the sdk.
------------------------------------------------------------------------
### IOHIDFamily
#### 9J61
?
#### 9F33pd1
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9F33pd1
The plist file above contains some patches that tend to avoid most of the errors just below.
darwinbuild IOHIDFamily
**Problem:** `/System/Library/Frameworks/IOKit.framework/PrivateHeaders/hid/IOHIDLibPrivate.h:30:42: error: IOKit/hid/IOHIDLibUserClient.h: No such file or directory`
**Pseudo-solution:** Headers from IOKitUser appear to be needed:
`cp BuildRoot/XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/hid/IOHIDLibUserClient.h BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/hid/`
**Problem: **`/SourceCache/IOHIDFamily/IOHIDFamily-258.3/IOHIDLib/IOHIDDeviceClass.cpp:455: error: 'nil' was not declared in this scope`
**Problem: **`/SourceCache/IOHIDFamily/IOHIDFamily-258.3/IOHIDLib/IOHIDQueueClass.cpp:447: error: 'nil' was not declared in this scope`
**Solution:** `#include <objc/objc.h>`
**Problem:**`/SourceCache/IOHIDFamily/IOHIDFamily-258.3/hidd/hidd.c:28: error: 'IOHIDEventSystemRef' undeclared (first use in this function)`
**Solution:** **?**
``
**Solution:** **?**
------------------------------------------------------------------------
****
### IOKitUser
`darwinbuild IOKitUser`
**Problem:** The framework is registered in /XCD/SY:
`40755 0 0 0 ./XCD/SY/Library/Frameworks/IOKit.framework`
****
and replace XCD/SY in the binary with /System for all occurences.
Then:
mv Roots/IOKitUser/IOKitUser-388.2.1.root~28/XCD/SY/Library/
mkdir Roots/IOKitUser/IOKitUser-388.2.1.root~28/System
mv Roots/IOKitUser/IOKitUser-388.2.1.root~28/XCD/SY/Library/ Roots/IOKitUser/IOKitUser-388.2.1.root~28/System
rm -R Roots/IOKitUser/IOKitUser-388.2.1.root~28/XCD/
After in the chrooted buildroot:
file /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit: Mach-O universal binary with 4 architectures
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (for architecture i386): Mach-O dynamically linked shared library i386
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (for architecture ppc7400): Mach-O dynamically linked shared library ppc
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64
and
otool -L /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit:
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
Instead of
otool -L /XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/IOKit
/XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/IOKit:
/XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/XCD/SY/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.18.0)
/XCD/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/XCD/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/XCD/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
****
#### 9J61
PureFoundation need to be added (for `arch' dep).
**Problem:** `pbxcp: IOAccelSurfaceControl.h: No such file or directory`
`pbxcp: IOGraphicsLibPrivate.h: No such file or directory`
**Solution:** `cp -R BuildRoot/SourceCache/IOKitUser/IOKitUser-388.53.11/graphics.subproj/*h BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/graphics`
`cp -R BuildRoot/private/var/tmp/IOKitUser/IOKitUser-388.53.11.sym/BuiltProducts/include/IOKit/graphics/IO* BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/graphics`
**Problem:**
**Solution:** `darwinbuild AppleDisplay` (it could fail to build, but anyway we need the header file)
then `cp ./BuildRoot/private/var/tmp/AppleDisplays/AppleDisplays-1140.0.5.root/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/graphics/IODisplayProductIDs.h BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/graphics`
**Problem:**
`#ifndef kNilOptions
` `#define kNilOptions 0
#endif`
... follow solutions and pseudo-solutions as below.
#### 9F33pd1 (+ppc +ppc64 +x86 +x86_64)
To build isoutil on 9J61, iokituser for i386+ppc in 9F33pd1 need to be build.. + some regular solutions available below needs to be applied..
Also i386 specific arch has been removed from 9F33pd1 of IOKitUser project.
Problems:
cp -R BuildRoot/SourceCache/IOGraphics/IOGraphics-305.14/IOGraphicsFamily/IOKit/graphics/* BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/graphics/
cp BuildRoot/XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/storage/RAID/AppleRAIDUserLib.h BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/storage/RAID
cp /Users/aladin/PureDarwin/darwinbuild/9J61/.build/buildroot.nfs/SourceCache/AppleDisplays/AppleDisplays-1140.0.5/*h BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/graphics
cp -R /Users/aladin/PureDarwin/darwinbuild/9J61/.build/buildroot.nfs/SourceCache/IOGraphics/IOGraphics-305.14/IOGraphicsFamily/IOKit/i2c BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/
**Problem: **/SourceCache/IOKitUser/IOKitUser-388.2.1/pwr_mgt.subproj/IOPMEnergyPrefs.c:36:31: error: servers/bootstrap.h: No such file or directory
According to DTrace:
1 17720 open:entry cc1 /private/var/tmp/IOKitUser/IOKitUser-388.2.1.sym/BuiltProducts/include/servers/bootstrap.h
1 17720 open:entry cc1 /private/var/tmp/IOKitUser/IOKitUser-388.2.1.obj/IOKitUser.build/DerivedSources/servers/bootstrap.h
1 17720 open:entry cc1 /System/Library/Frameworks/System.framework/PrivateHeaders/servers/bootstrap.h
1 17720 open:entry cc1 /private/var/tmp/IOKitUser/IOKitUser-388.2.1.obj/IOKitUser.build/IOKit.build/DerivedSources/servers/bootstrap.h
1 17720 open:entry cc1 /usr/local/include/servers/bootstrap.h
1 17720 open:entry cc1 /usr/lib/gcc/powerpc-apple-darwin9/4.0.1/include/servers/bootstrap.h
1 17720 open:entry cc1 /usr/include/servers/bootstrap.h
**Solution:** cp -R /Developer/SDKs/MacOSX10.5.sdk/usr/include/servers/ BuildRoot/usr/include
cp /Developer/SDKs/MacOSX10.5.sdk/usr/include/servers/* BuildRoot/usr/include/servers/
At the end: `** BUILD SUCCEEDED **`
o//
That helps to satisfy isoutil on 9J61 per example.
`file':
`XCD/SY/Library/Frameworks/IOKit.framework/IOKit (for architecture ppc7400):` `Mach-O dynamically linked shared library ppc`
`XCD/SY/Library/Frameworks/IOKit.framework/IOKit (for architecture ppc64):` `Mach-O 64-bit dynamically linked shared library ppc64`
`XCD/SY/Library/Frameworks/IOKit.framework/IOKit (for architecture i386):` `Mach-O dynamically linked shared library i386`
`XCD/SY/Library/Frameworks/IOKit.framework/IOKit (for architecture x86_64):` `Mach-O 64-bit dynamically linked shared library x86_64`
#### 9F33pd1 (ok)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9F33pd1
The plist file above contains some patches that tend to avoid most of the errors just below.
In order to build IOKitUser, you also need to alter your *BuildRoot* directory, a minimalist script and some patches are available [here](http://code.google.com/p/puredarwin/source/browse/#svn/trunk/scripts).
./pd_injectbuildroot /Volumes/Builds/9F33/BuildRoot/
Not sure if it is needed or not:
darwinbuild -headers IOKitUser
Now, prepare coffee.
darwinbuild IOKitUser
dyld: Library not loaded: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
Referenced from: /usr/bin/arch
Reason: image not found
gcc-4.0: Invalid arch name : -D__MACH30__
`mig: fatal: "<no name yet>", line -1: no SubSystem declaration`
****
**mv /usr/bin/arch /usr/bin/arch.origin**
**echo 'uname -p' > /usr/bin/arch**
**chmod +x /usr/bin/arch**
**Alternative solution:** [PureFoundation](/archive/developers/PureFoundation.md) can be added manually in the buildroot to satisfy dependency referenced to Foundation.framework.
`root@europa:/Volumes/Builds/``9G55/BuildRoot# mv PureFoundation/Foundation.``framework System/Library/Frameworks`
`root@europa:/Volumes/Builds/``9G55/BuildRoot# chroot .
europa# arch
NSObject +load
i386`
****
**Also:** The latest builds of the patched CFLite which accompanies PureFoundation include an implementation of CFNotificationCenter.
**Problem:** ``
`pbxcp: IOAccelSurfaceControl.h: No such file or directory`
**Problem:** ``
pbxcp: IOGraphicsLibPrivate.h: No such file or directory
**Solution:** `mkdir -p `**BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/graphics**
Then copy to the directory created just above from:
- `BuildRoot/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/*.h`
- BuildRoot/private/var/tmp/IOKitUser/IOKitUser-388.2.1.root/XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/graphics/*.h
- `BuildRoot/private/var/tmp/IOKitUser/IOKitUser-388.2.1.sym/BuiltProducts/include/IOKit/graphics/*.h`
**TODO: **clean location please..
**** /XCD/loper/usr/bin/mig: line 147: : command not found
darwinbuild -load bootstrap_cmds
cp BuildRoot/usr/bin/arch BuildRoot/usr/bin/mig BuildRoot/XCD/loper/usr/bin/
mkdir BuildRoot/XCD/loper/usr/libexec/
cp BuildRoot/usr/libexec/migcom BuildRoot/XCD/loper/usr/libexec
**Problem**
`/System/Library/Frameworks/Security.framework/Headers/SecBase.h:63: error: syntax error before 'SecKeychainAttrType'`
`/System/Library/Frameworks/Security.framework/Headers/SecBase.h:74: error: syntax error before 'SecKeychainAttrType'`
`/System/Library/Frameworks/Security.framework/Headers/SecBase.h:77: error: syntax error before '}' token`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h:78: error: syntax error before 'SecAuthenticationType'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h:117: error: syntax error before 'SecProtocolType'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h:526: error: syntax error before 'SecProtocolType'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h:549: error: syntax error before 'SecProtocolType'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h:45: error: syntax error before 'SecItemClass'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h:75: error: syntax error before 'SecItemAttr'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h:186: error: syntax error before 'itemClass'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h:211: error: syntax error before 'SecItemClass'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h:232: error: syntax error before 'SecItemClass'`
`/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h:55: error: syntax error before 'SecItemClass'`
****Comment all the problematic lines in `/System/Library/Frameworks/Security.framework/Headers/*h`
**Solution:** Add in SecBase.h `#include <CarbonCore/MacTypes.h>`
**Problem: /SourceCache/IOKitUser/IOKitUser-388.2.1/IOKitLib.c:347: error: 'kNilOptions' undeclared (first use in this function)**
Psuedo-Solution: Patch *BuildRoot/SourceCache/IOKitUser/IOKitUser-388.2.1/IOKitLib.h* with
`#ifndef kNilOptions
` `#define kNilOptions 0
#endif`
**Solution:** Add in SecBase.h #include <CarbonCore/MacTypes.h>
**Problem:** It seems related to [FourCC](http://en.wikipedia.org/wiki/FourCC) (and Carbon?)
**/private/var/tmp/IOKitUser/IOKitUser-388.2.1.sym/BuiltProducts/include/IOKit/graphics/IOGraphicsInterface.h:92: error: syntax error before 'FourCharCode'**
**Pseudo-Solution: **Comment line 91 and line 92 in BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/graphics/IOGraphicsInterface.h as
`// IOReturn (*CopyCapabilities)`
`// (void *thisPointer, FourCharCode select, CFTypeRef * capabilities);`
**TODO:** FourCharCode needs to be included instead of disabled, there is a definition somewhere to include in the proper way at the right place
**Problem: /SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/GetSymbolFromPEF.h:65: error: syntax error before 'LogicalAddress'**
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/GetSymbolFromPEF.h:65: warning: no semicolon at end of struct or union`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/GetSymbolFromPEF.h:183: error: syntax error before 'LogicalAddress'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/GetSymbolFromPEF.h:193: error: syntax error before 'thePEFPtr'`
****Replace the unknown types with "`void *`", recreate missing variable declaration.
****
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:136: error: 'sectionHeaderPtr' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:136: error: (Each undeclared identifier is reported only once`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:136: error: for each function it appears in.)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:142: error: 'nil' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:148: error: 'thePEFPtr' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:294: error: 'theData' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:296: error: 'noErr' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:300: error: 'Ptr' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:300: error: syntax error before 'originalUnpackBuffer'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:315: error: syntax error before 'thePEFPtr'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:318: error: invalid storage class for function 'GetSymbolFromPEF'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:319: error: 'inSymbolName' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:331: error: 'LogicalAddress' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:331: error: syntax error before 'expandedDataPtr'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:338: error: dereferencing pointer to incomplete type`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:342: error: dereferencing pointer to incomplete type`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:347: error: 'theSymbolPtr' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:354: error: dereferencing pointer to incomplete type`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:358: error: invalid application of 'sizeof' to incomplete type 'ContainerHeader' `
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:410: error: invalid application of 'sizeof' to incomplete type 'ContainerHeader' `
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:413: error: 'expandedDataPtr' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:437: error: 'theSymbolSize' undeclared (first use in this function)`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:444: error: syntax error before 'expandedDataPtr'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:454: error: syntax error before 'thePEFPtr'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:455: error: invalid storage class for function 'GetPEFLen'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:465: error: dereferencing pointer to incomplete type`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:470: error: dereferencing pointer to incomplete type`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:475: error: invalid use of undefined type 'struct ContainerHeader'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:477: error: dereferencing pointer to incomplete type`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:496: error: invalid storage class for function 'SymbolCompare'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:548: error: invalid storage class for function 'ExaminePEF'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:645: error: syntax error before 'LogicalAddress'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:727: error: invalid storage class for function 'PEFExamineFile'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:793: error: invalid storage class for function '_PEFExamineFile'`
`/SourceCache/IOKitUser/IOKitUser-388.2.1/graphics.subproj/PEFSupport.c:810: error: invalid storage class for function 'PEFExamineBundle'`
**Pseudo-Solution: **Replace the unknown types with "`void *`", recreate missing variable declaration.
****
**Pseudo-Solution: **Comment at line 352 in MacTypes.h
`//enum {`
`// kNilOptions = 0`
`//};`
**TODO:** This looks like what we need just above.. what a paradox.
****
**Pseudo-Solution: **Feed the empty file with a subsystem declaration as:
`subsystem IOHIDEventSystem 71000;`
**TODO:** What should we really do?
****
**Solution: `chroot BuildRoot`**
**mkdir -p /AppleInternal/XCD/loper**
`ln -s /usr/local/bin/seg_addr_table /AppleInternal/XCD/loper/`
**Problem:** Ruby is (implicitly) missing:
`error: couldn't exec /XCD/loper/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copyplist: No such file or directory`
`error: couldn't exec /XCD/loper/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings: No such file or directory`
****
`cp /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib BuildRoot/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib`
**
**
**Problem:` `/XCD/loper/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copyplist:15:in `require': no such file to load -- optparse (LoadError)**
`/XCD/loper/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings:16:in `require': no such file to load -- optparse (LoadError)`
****
Here, compilation pseudo-success for the first time after 94 attempts... o/
Copying IOKitUser from /Volumes/Builds/9F33/Roots/IOKitUser/IOKitUser-388.2.1.root~95 ...
`IOKitUser - 70 files registered.`
__Notes:__ Do not alter the prototype of functions, or you will end with undefined symbols at linking as:
Undefined symbols:
` "_GetSymbolFromPEF", referenced from:`
` __PEFExamineFile in PEFSupport.o`
` __PEFExamineFile in PEFSupport.o`
` "_GetPEFLen", referenced from:`
` __PEFExamineFile in PEFSupport.o`
**Problem: **
`/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit:`
`/XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)`
``
`/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)`
`/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
`/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)`
****
/System/Library/Frameworks/CoreFoundation/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then rebuild CF:
<span style="font-family:courier new"><span style="font-size:12px">darwinbuild -init 9F33pd1 && darwinbuild CF && darwinbuild -load CF</span></span>
The plist file above contains some patches that tend to avoid most of the errors just below.
After recompilation of CF, dependency is fixed:
`/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)`
**Next solution: **See <http://darwinbuild.macosforge.org/trac/ticket/41#comment:1> / [rdar://problem/6488974](http://rdar://problem/6488974)

<span style="font-family:Helvetica;font-size:12px"><span style="font-size:13px"><http://darwinbuild.macosforge.org/trac/ticket/9></span></span>
<span style="font-family:Helvetica;font-size:12px"><span style="font-size:13px"><http://darwinbuild.macosforge.org/trac/ticket/17></span></span>
<span style="font-family:Helvetica"><span style="font-family:Arial"><http://darwinbuild.macosforge.org/trac/ticket/41#comment:1></span></span>
[rdar://problem/6488974](http://rdar://problem/6488974)
------------------------------------------------------------------------
### IOKitTools
#### 9J61 (ok)
See the n-pass + IOKitUser stories..
**Problem: **`/SourceCache/IOKitTools/IOKitTools-76/ioreg.tproj/ioreg.c:25:78: error: IOKit/IOCFSerialize.h: No such file or directory`
`/SourceCache/IOKitTools/IOKitTools-76/ioreg.tproj/ioreg.c:26:77: error: IOKit/IOKitLib.h: No such file or directory`
`/SourceCache/IOKitTools/IOKitTools-76/ioreg.tproj/ioreg.c:27:82: error: IOKit/IOKitLibPrivate.h: No such file or directory`
**Solution:** `cp -R BuildRoot/XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders/* BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/PrivateHeaders`
`cp -R BuildRoot /XCD/SY/Library/Frameworks/IOKit.framework/Versions/A/Headers/* BuildRoot/System/Library/Frameworks/IOKit.framework/Versions/A/Headers`
------------------------------------------------------------------------
### Libc
#### 9J61pd1
**Problem:** /private/var/tmp/Libc/Libc-498.1.7.sym/include/plockstat.h:116: error: syntax error before '*' token
**Solution:** patch plockstat.h "on the fly" (comments error lines). It is generated via DTrace it seems at compilation time, and all error are some prototypes without name, only the parameters (e.g., (int a, int b..) instead of fctname(int a, int b..)).
+ see patch
------------------------------------------------------------------------
### Libc_debug
#### 9J61pd1
**Problem: sh: line 2: 58568 Trace/BPT trap dtrace -o /private/var/tmp/Libc_debug/Libc_debug-498.1.7.sym/include/plockstat.h -C -h -s /SourceCache/Libc_debug/Libc-498.1.7/pthreads/plockstat.d**
*** Error code 133
1 error
------------------------------------------------------------------------
### Libc_profile
#### 9J61pd1
**Problem:** sh: line 2: 60868 Trace/BPT trap dtrace -o /private/var/tmp/Libc_profile/Libc_profile-498.1.7.sym/include/plockstat.h -C -h -s /SourceCache/Libc_profile/Libc-498.1.7/pthreads/plockstat.d
*** Error code 133
1 error
*** Error code 2
1 error
*** Error code 2
------------------------------------------------------------------------
### Libsystem
****
darwinbuild Libsystem
#### 9J61 ?
#### 9F33
**Problem:** `ar: libc-partial_debug.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)`
`ar: libc-partial_debug.a: Inappropriate file type or format`
**Solution:** `lipo BuildRoot/usr/local/lib/system/libc-partial_debug.a -thin i386 -output libc-partial_debug.a`
`mv libc-partial_debug.a BuildRoot/usr/local/lib/system/libc-partial_debug.a`
**Problem:** ar: libsyscall_debug.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: libsyscall_debug.a: Inappropriate file type or format
**Solution:** lipo BuildRoot/usr/local/lib/system/libsyscall_debug.a -thin i386 -output libsyscall_debug.a
mv libsyscall_debug.a BuildRoot/usr/local/lib/system/libsyscall_debug.a
**Problem:** ar: libc-partial.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: libc-partial.a: Inappropriate file type or format
**Solution:** lipo BuildRoot/usr/local/lib/system/libc-partial.a -thin i386 -output libc-partial.a
mv libc-partial.a BuildRoot/usr/local/lib/system/libc-partial.a
**Problem:** ar: libsyscall.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: libsyscall.a: Inappropriate file type or format
**Solution:** lipo BuildRoot/usr/local/lib/system/libsyscall.a -thin i386 -output libsyscall.a
mv libsyscall.a BuildRoot/usr/local/lib/system/libsyscall.a
**Problem:** ar: libc-partial_profile.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: libc-partial_profile.a: Inappropriate file type or format
**Solution:** lipo BuildRoot/usr/local/lib/system/libc-partial_profile.a -thin i386 -output libc-partial_profile.a
mv libc-partial_profile.a BuildRoot/usr/local/lib/system/libc-partial_profile.a
**Problem:** ar: libsyscall_profile.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: libsyscall_profile.a: Inappropriate file type or format
**Solution:** lipo BuildRoot/usr/local/lib/system/libsyscall_profile.a -thin i386 -output libsyscall_profile.a
mv libsyscall_profile.a BuildRoot/usr/local/lib/system/libsyscall_profile.a
**Problem:** `ld: library not found for -llaunch`
****
See <http://darwinbuild.macosforge.org/trac/ticket/10>
------------------------------------------------------------------------
### NFS
#### 9J61 (ok)
**Problems:**` /SourceCache/NFS/NFS-25.2/showmount/mshow.c:31:20: error: dns_sd.h: No such file or directory`
`/SourceCache/NFS/NFS-25.2/showmount/mshow.c:31:20: error: dns_sd.h: No such file or directory`
**Solution:** `cp -R /Developer/SDKs/MacOSX10.5.sdk/usr/include/dns* BuildRoot/usr/include`
**Problem:** `/SourceCache/NFS/NFS-25.2/nfsd/main.c:86:20:/SourceCache/NFS/NFS-25.2/nfsd/main.c:86:20: error: error: launch.h: No such file or directorylaunch.h: No such file or directory`
**Solution: **`cp /Users/aladin/PureDarwin/darwinbuild/9J61/.build/buildroot.nfs/private/var/tmp/launchd_libs/launchd_libs-258.22.root/usr/include/* BuildRoot/usr/include`
Then !
`BUILD TIME: 0h 0m 14s`
`EXIT STATUS: 0`
`NFS - 25 files registered.`
------------------------------------------------------------------------
### PowerManagement
#### 9J61
Problem:
/SourceCache/PowerManagement/PowerManagement-158.10/AppleSmartBatteryManager/AppleSmartBatteryManager.h:28:43: error: IOKit/smbus/IOSMBusController.h: No such file or directory
Solution: ? Headers seems not available on macosx too.
See <http://darwinbuild.macosforge.org/trac/ticket/80>
------------------------------------------------------------------------
### Security
`darwinbuild Security`
#### 9J61?
#### 9F33
****
**[...]**
**2008-10-20 06:32:44.589 xcodebuild[65272:713] [MT] ASSERTION FAILURE in /SourceCache/DevToolsBase/DevToolsBase-1114/pbxcore/SpecificationTypes/XCPlatformSpecification.m:421**
**Details: The Mac OS X platform is missing - cannot set a default platform.**
****
****
**** generateErrStrings.mm:5:35: error: Foundation/Foundation.h: No such file or directory
**** **Please, let us know if you have one. **Since Foundation is not part of Darwin, we need to patch the source so that it doesn't need Foundation any more (Sometimes older versions of the same source can give a hint).

------------------------------------------------------------------------
### SecurityTool
#### 9J61
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h: In static member function 'static void Security::MacOSError::check(OSStatus)':
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope
/usr/local/SecurityPieces/Frameworks/security_cdsa_utilities.framework/Headers/cssmdbname.h: In member function 'bool Security::DbName::operator<(const Security::DbName&) const':
/usr/local/SecurityPieces/Frameworks/security_cdsa_utilities.framework/Headers/cssmdbname.h:90: error: 'nil' was not declared in this scope
security.c:62:34: error: security_asn1/secerr.h: No such file or directory
------------------------------------------------------------------------
### SystemStubs
#### 9J61 (ok)
#### 9F33 (ok)
**Problem: **`Error: couldn't exec /XCD/loper/usr/bin/libtool: No such file or directory`
**Solution: **`cp BuildRoot/usr/bin/libtool BuildRoot/XCD/loper/usr/bin/`
------------------------------------------------------------------------
### TargetConfig
`darwinbuild TargetConfig`
#### 9J61 (ok)
#### 9F33pd1 (ok)
**Problem:** *CoreFoundation* has no *.framework* extension.
**dyld: Library not loaded: /System/Library/Frameworks/CoreFoundation/Versions/A/CoreFoundation**
****
/System/Library/Frameworks/CoreFoundation/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then rebuild CF:
<span style="font-family:courier new"><span style="font-size:12px">darwinbuild -init 9F33pd1 && darwinbuild CF && darwinbuild -load CF</span></span>
The plist file above contains some patches that tend to avoid most of the errors just below.
After recompilation of CF, dependency is fixed:
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)
Since *TargetConfig* is available and can be built, we will fix `tconf' with the right framework pathname instead of using a symbolic link or copying the framework.
`darwinbuild TargetConfig`
`darwinbuild -load TargetConfig`
Now tconf is linked to the correct framework:
otool -L BuildRoot/usr/local/bin/tconf
BuildRoot/usr/local/bin/tconf:
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)
So we can remove the previous temporary CoreFoundation directory:
rm -fR BuildRoot/System/Library/Frameworks/CoreFoundation
------------------------------------------------------------------------
### WebCore
#### 9J61
make: *** No rule to make target `JSEventTargetBase.lut.h', needed by `all'. Stop.
------------------------------------------------------------------------
### at_cmds
#### 9J61pd1 (ok)
**Problem:** appletalk.c:44:29: error: SystemIntegrity.h: No such file or directory
**Solution:** **excellent project option**, which helps us to easily make a patch, it is almost like we do not have the need(s) to bother about some side effects (consequences of the patch) because the developers have the big picture of their project. It's a real thank you.
cf the src:
------------------------------------------------------------------------
### autofs
#### 9J61
**Problem: **/SourceCache/autofs/autofs-109.8/autofsd/autofsd.c:36:43: error: CoreFoundation/CoreFoundation.h: No such file or directory
**Solution:**
------------------------------------------------------------------------
### bootp
#### 9J61
**Problem:** /XCD/loper/usr/bin/gcc-4.0 -x c -arch ppc -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -Os -mdynamic-no-pic -mtune=G4 -fvisibility=hidden -mmacosx-version-min=10.5 -gdwarf-2 -I/private/var/tmp/bootp/bootp-170.1.obj/bootp.build/bootpd.build/bootpd.hmap -Wall -Wno-four-char-constants -Wno-unknown-pragmas -F/private/var/tmp/bootp/bootp-170.1.sym/BuiltProducts -F/XCD/SY/Library/PrivateFrameworks -I/private/var/tmp/bootp/bootp-170.1.sym/BuiltProducts/include -I/private/var/tmp/bootp/bootp-170.1.obj/bootp.build/bootpd.build/DerivedSources -c /SourceCache/bootp/bootp-170.1/bootpd.tproj/bsdpd.c -o /private/var/tmp/bootp/bootp-170.1.obj/bootp.build/bootpd.build/Objects-normal/ppc/bsdpd.o In file included from /SourceCache/bootp/bootp-170.1/bootpd.tproj/bsdpd.c:89: /SourceCache/bootp/bootp-170.1/bootpd.tproj/AFPUsers.h:32:41: error: OpenDirectory/OpenDirectory.h: No such file or directory
**Solution:** chroot BuildRoot
ln -s /System/Library/PrivateFrameworks/OpenDirectory.framework /XCD/SY/Library/PrivateFrameworks/
then
**Problem:** /XCD/SY/Library/PrivateFrameworks/OpenDirectory.framework/Headers/OpenDirectory.h:27:51: error: CFOpenDirectory/CFOpenDirectoryConsts.h: No such file or directory
/XCD/SY/Library/PrivateFrameworks/OpenDirectory.framework/Headers/OpenDirectory.h:28:45: error: CFOpenDirectory/CFOpenDirectory.h: No such file or directory
**Solution:** mkdir -p BuildRoot/usr/include/CFOpenDirectoryroot
cp BuildRoot/private/var/tmp/CFOpenDirectory/CFOpenDirectory-39.root/XCD/SY/Library/PrivateFrameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/Headers/CFOpenDirectory* BuildRoot/usr/include/CFOpenDirectory
then
**Problem:** ld: file not found: /System/Library/PrivateFrameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
------------------------------------------------------------------------
### bootstrap_cmds
`darwinbuild bootstrap_cmds`
#### 9J61 (ok)
#### 9G55 (ok)
#### 9F33 (ok)
****
<span style="font-weight:bold">Solution: <span style="font-weight:normal"><span style="font-family:courier new,monospace"><span style="font-size:small">darwinbuild flex && darwinbuild -load flex</span></span></span></span>

------------------------------------------------------------------------
### configd
darwinbuild configd
#### 9J61
**Problem:** CompileC /private/var/tmp/configd_plugins/configd_plugins-91.obj/configd_plugins.build/InterfaceNamer.build/Objects-normal/ppc/ifnamer.o
InterfaceNamer.bproj/ifnamer.c:72:58: error: SystemConfiguration/VLANConfigurationPrivate.h: No such file or directory
#### 9F33 (ok)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9F33pd1
The plist file above contains some patches that tend to avoid most of the errors just below.
`darwinbuild configd`
****
**Solution:** `cp -R BuildRoot/System/Library/Frameworks/System.framework BuildRoot/XCD/SY/Library/Frameworks/`
**Problem:** `/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c:47:42: error: EAP8021X/EAPClientProperties.h: No such file or directory`
consequently..
`/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c: In function 'SCNetworkInterfaceCheckPassword':`
`/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c:3825: error: 'kEAPClientPropUserPasswordKeychainItemID' undeclared (first use in this function)`
`/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c: In function 'SCNetworkInterfaceCopyPassword':`
`/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c:3911: error: 'kEAPClientPropUserPasswordKeychainItemID' undeclared (first use in this function)`
`/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c: In function 'SCNetworkInterfaceRemovePassword':`
`/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c:4010: error: 'kEAPClientPropUserPasswordKeychainItemID' undeclared (first use in this function)`
`/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c: In function 'SCNetworkInterfaceSetPassword':`
`/SourceCache/configd/configd-212.2/SystemConfiguration.fproj/SCNetworkInterface.c:4208: error: 'kEAPClientPropUserPasswordKeychainItemID' undeclared (first use in this function)`
****
**Problem: **`Undefined symbols:`
` "_CFPreferencesAppValueIsForced", referenced from:`
` _processPreferences in SCNetworkConnectionPrivate.o`
` _SCUserPreferencesIsForced in SCNetworkConnectionPrivate.o`
` "_CFStringTransform", referenced from:`
` __SC_dos_copy_string in SCDPrivate.o`
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then rebuild configd:
<span><span style="font-family:courier new,monospace"><span style="font-size:small">darwinbuild -init 9F33pd1 && darwinbuild configd</span></span></span>
The plist file above contains some patches that tend to avoid the undefined symbols.
**Problem:** The framework is registered in /XCD/SY:
**40555 0 0 0 ./XCD/SY/Library/Frameworks/SystemConfiguration.framework**
**Solution:** **Please, let us know if you have one.**
------------------------------------------------------------------------
### configd_executables
`darwinbuild configd_executables`
****
****
****
------------------------------------------------------------------------
****
### copyfile
9J61
Problem: /SourceCache/copyfile/copyfile-42/copyfile.c:48:24: error: quarantine.h: No such file or directory
------------------------------------------------------------------------
### cron
#### 9J61 (ok)
****
`/SourceCache/cron/cron-30/cron/do_command.c:39:35: error: IOKit/pwr_mgt/IOPMLib.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:40:32: error: IOKit/pwr_mgt/IOPM.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:41:28: error: IOKit/IOReturn.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:38:28: error: IOKit/IOKitLib.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:39:35: error: IOKit/pwr_mgt/IOPMLib.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:40:32: error: IOKit/pwr_mgt/IOPM.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:41:28: error: IOKit/IOReturn.h: No such file or directory`
**Solution:** <span style="font-family:courier new,monospace"><span style="font-size:small">darwinbuild IOKitUser && darwinbuild -load IOKitUser</span></span> (note: plan to keep some effort and coffee probably involved in building IOKitUser.
------------------------------------------------------------------------
### cups
9J61
Problem: make: *** No rule to make target `installfat'. Stop.
Problem: dyld
/XCD/loper/usr/bin/g++-4.0 -arch ppc -L/private/var/tmp/dyld/dyld-97.1.sym/BuiltProducts -F/private/var/tmp/dyld/dyld-97.1.sym/BuiltProducts -filelist /private/var/tmp/dyld/dyld-97.1.obj/dyld.build/dyld.build/Objects-normal/ppc/dyld.LinkFileList -exported_symbols_list /SourceCache/dyld/dyld-97.1/src/dyld.exp -mmacosx-version-min=10.5 -Wl,-dead_strip -seg1addr 0x8fe00000 -lstdc++-static -nostdlib /usr/local/lib/system/libc.a -lgcc_eh -lgcc -Wl,-e,__dyld_start -Wl,-dylinker -Wl,-dylinker_install_name,/usr/lib/dyld -Wl,-non_global_symbols_strip_list,/SourceCache/dyld/dyld-97.1/src/strip.exp -o /private/var/tmp/dyld/dyld-97.1.obj/dyld.build/dyld.build/Objects-normal/ppc/dyld
ld: couldn't dlopen() /usr/lib/libdtrace.dylib: dlopen(/usr/lib/libdtrace.dylib, 1): Library not loaded: /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
**Solution:** rebuild dtrace patched instead of using the default binaryroot available at apple/macosforge to avoid the symbolication link.
Or use the binaryroot from 9F33pd1 already patched (tar xzvf ../../../hg/Roots/9F33pd1/dtrace.root.tar.gz in BuildRoot)
But... more pb: /XCD/loper/usr/bin/g++-4.0 -arch ppc -L/private/var/tmp/dyld/dyld-97.1.sym/BuiltProducts -F/private/var/tmp/dyld/dyld-97.1.sym/BuiltProducts -filelist /private/var/tmp/dyld/dyld-97.1.obj/dyld.build/dyld.build/Objects-normal/ppc/dyld.LinkFileList -exported_symbols_list /SourceCache/dyld/dyld-97.1/src/dyld.exp -mmacosx-version-min=10.5 -Wl,-dead_strip -seg1addr 0x8fe00000 -lstdc++-static -nostdlib /usr/local/lib/system/libc.a -lgcc_eh -lgcc -Wl,-e,__dyld_start -Wl,-dylinker -Wl,-dylinker_install_name,/usr/lib/dyld -Wl,-non_global_symbols_strip_list,/SourceCache/dyld/dyld-97.1/src/strip.exp -o /private/var/tmp/dyld/dyld-97.1.obj/dyld.build/dyld.build/Objects-normal/ppc/dyld
error: provider plockstat doesn't exist
error: Could not register probes
ld: error creating dtrace DOF section
collect2: ld returned 1 exit status
------------------------------------------------------------------------
### dtrace
###
Run-time problem: dtrace: failed to compile script [...] "/usr/lib/dtrace/darwin.d", line 26: syntax error near "uthread_t"
Solution: related mach_kernel.ctfsys? some probe not available?
9J61
****
Problem: /SourceCache/dtrace/dtrace-48.1/libproc/libproc.m:10:40: error: Symbolication/Symbolication.h: No such file or directory
/SourceCache/dtrace/dtrace-48.1/libproc/libproc.m:11:47: error: Symbolication/SymbolicationPrivate.h: No such file or directory
In file included from /SourceCache/dtrace/dtrace-48.1/libproc/libproc.m:29:
Solution:
#### 9G55
DTrace compilation fails.
****` In file included from /SourceCache/dtrace/dtrace-48/libctf/ctf_lib.c:30:`
`/usr/include/sys/stat.h:75:26: error: Availability.h: No such file or directory`
`In file included from /SourceCache/dtrace/dtrace-48/libctf/ctf_lib.c:30:`
`/usr/include/sys/stat.h:460: error: syntax error before '__OSX_AVAILABLE_BUT_DEPRECATED'`
**Solution: ... **Found in two locations into the host system:
`/Developer/SDKs/MacOSX10.5.sdk/usr/include/Availability.h`
`/usr/include/Availability.h`
<span style="font-weight:bold">Availability.h should be soon available: <span style="font-weight:normal"><http://darwinbuild.macosforge.org/trac/changeset/459> </span></span>
### 9F33 (ok)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9F33pd1
The plist file above contains some patches that tend to avoid most of the errors just below.
__Note:__ dtrace compilation needs *libdwarf* to be installed in the BuildRoot, and *libdwarf* depends on *libelf*. Both *libdwarf* and *libelf* projects aren't available in darwinbuild, so they have been added in the custom plist to satisfy dtrace requirements.
So before building dtrace.
<span style="font-size:12px">darwinbuild libelf && darwinbuild -load libelf</span>
<span style="font-size:12px">darwinbuild libdwarf && darwinbuild -load libdwarf</span>
This should be done automatically with dtrace dependencies, **but how**?
darwinbuild dtrace
**** error: couldn't exec /XCD/loper/usr/bin/yacc: No such file or directory
**Old-Solution: darwinbuild bison**
**darwinbuild -load bison**
**cp BuildRoot/usr/bin/yacc BuildRoot/XCD/loper/usr/bin/ **
**Problem: **`error: couldn't exec /XCD/loper/usr/bin/lex: No such file or directory`
<span style="font-weight:bold">Old-Solution: <span style="font-weight:normal"><span style="font-family:courier new,monospace"><span style="font-size:small"><span style="color:rgb(204,204,204)">darwinbuild flex && darwinbuild -load flex</span></span></span></span></span>
cp BuildRoot/usr/bin/lex BuildRoot/XCD/loper/usr/bin
**Solution: **[http://darwinbuild.macosforge.org/trac/ticket/43](http://darwinbuild.macosforge.org/trac/ticket/43)
**** /XCD/loper/usr/bin/mig: line 147: : command not found
**Solution: darwinbuild bootstrap_cmds**
darwinbuild -load bootstrap_cmds
cp BuildRoot/usr/bin/arch BuildRoot/usr/bin/mig BuildRoot/XCD/loper/usr/bin/
mkdir BuildRoot/XCD/loper/usr/libexec/
cp BuildRoot/usr/libexec/migcom BuildRoot/XCD/loper/usr/libexec
__Note:__ we used `dtrace' to dtrace dtrace, e.g.:
` 0 18390 write_nocancel:entry sh /XCD/loper/usr/bin/mig: line 60: pushd: /XCD/loper/usr/bin/../libexec: No such file or directory`
` 0 18390 write_nocancel:entry grep migcomPath=$(realpath "${scriptRoot}/../libexec/migcom")`
**Problem:** `dyld: Library not loaded: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation`
Referenced from: /usr/bin/arch
Reason: image not found
****
mv /usr/bin/arch /usr/bin/arch.origin
echo 'uname -p' > /usr/bin/arch
chmod +x /usr/bin/arch
**Alternative solution:** PureFoundation can be used (from <http://www.hereapi.com/pf/index.html>), it really seems interesting as showed just below, it works for `arch':
`root@europa:/Volumes/Builds/``9G55/BuildRoot# mv PureFoundation/Foundation.``framework System/Library/Frameworks
root@europa:/Volumes/Builds/``9G55/BuildRoot# chroot .
europa# arch
NSObject +load
i386
`
**** /SourceCache/dtrace/dtrace-48/libproc/libproc.m:10:40: error: Symbolication/Symbolication.h: No such file or directory
/SourceCache/dtrace/dtrace-48/libproc/libproc.m:11:47: error: Symbolication/SymbolicationPrivate.h: No such file or directory
**Solution**: Since Symbolication is not part of Darwin, all references to it need to be patched out of the source.
__Notes:__ <http://darwinbuild.macosforge.org/trac/ticket/23> / <http://darwinbuild.macosforge.org/trac/ticket/24>
On PureDarwin, the patched `dtrace' built from darwinbuild looks like:
/usr/sbin/dtrace:
`/usr/lib/libdtrace.dylib (compatibility version 1.0.0, current version 48.0.0)`
`/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)`
`/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)`
`/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`

On Mac OS X, `dtrace' looks like:
/usr/sbin/dtrace:
`/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 674.0.0)`
`/System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication (compatibility version 1.0.0, current version 35.0.0)`
`/usr/lib/libdtrace.dylib (compatibility version 1.0.0, current version 48.0.0)`
`/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)`
`/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
`/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 474.0.0)`

------------------------------------------------------------------------
### eap8021x
#### 9J61pd1
**Problem:** ld64: warning, -seg_addr_table file cannot be read: /AppleInternal/Developer/seg_addr_table
ld64: warning, -seg_addr_table file cannot be read: /AppleInternal/Developer/seg_addr_table
ld64ld64: warning, :- seg_addr_tablewarning, -seg_addr_table file cannot be read: /AppleInternal/Developer/seg_addr_table
ld: warning in /System/Library/Frameworks//Security.framework/Security, missing required architecture ppc64 in file
ld: warning in /usr/lib/libSystemStubs.a, missing required architecture ppc64 in file cannot be read:file
Undefined symbols:
"_SecIdentityCreateWithCertificate" /AppleInternal/Developer/, referenced from:
**Solution:**
**Problem:** /usr/bin/cc -arch i386 -Os -pipe -no-cpp-precomp -Wmost -g -fno-common -I/private/var/tmp/eap8021x/eap8021x-49.8.sym/eapol.build/ProjectHeaders -I -I -I/private/var/tmp/eap8021x/eap8021x-49.8.sym/eapol.build/derived_src/eapolclient.tproj -I. -pipe -I/private/var/tmp/eap8021x/eap8021x-49.8.sym/eapol.build/Headers -I/private/var/tmp/eap8021x/eap8021x-49.8.sym/eapol.build/PrivateHeaders -F/private/var/tmp/eap8021x/eap8021x-49.8.sym -F/System/Library/PrivateFrameworks -F/System/Library/PrivateFrameworks -mdynamic-no-pic -fconstant-cfstrings -c -o /private/var/tmp/eap8021x/eap8021x-49.8.obj/objects-optimized/eapolclient.tproj/wireless.i386.o wireless.c
wireless.c:37:38: error: Apple80211/Apple80211API.h: No such file or directory
wireless.c:38:37: error: Apple80211/Apple80211IE.h: No such file or directory
wireless.c:47:54: error: Kernel/IOKit/apple80211/apple80211_ioctl.h: No such file or directory
Solution:
------------------------------------------------------------------------
### efax
#### 9J61
Problem: /SourceCache/efax/efax-28/efax/efaxos.c:144: error: 'kCFNotificationDeliverImmediately' undeclared (first use in this function)
/SourceCache/efax/efax-28/efax/efaxos.c:144: error: 'kCFNotificationPostToAllSessions' undeclared (first use in this function)
------------------------------------------------------------------------
### efiboot
**Problem:** make: *** No rule to make target `install'. Stop.
**<- no source available, only binary form.**
****
------------------------------------------------------------------------
****
### gcc_os
checking if mkdir takes one argument... yes
/SourceCache/gcc_os/gcc_os-1823/gcc/config.gcc: line 2971: out_file: command not found
/SourceCache/gcc_os/gcc_os-1823/gcc/config.gcc: line 2971: out_file: command not found
Using `/SourceCache/gcc_os/gcc_os-1823/gcc/config/rs6000/rs6000.c' for machine-specific logic.
Using `/SourceCache/gcc_os/gcc_os-1823/gcc/config/rs6000/rs6000.md' as machine description file.
Using the following target machine macro files:
/SourceCache/gcc_os/gcc_os-1823/gcc/config/rs6000/rs6000.h
/SourceCache/gcc_os/gcc_os-1823/gcc/config/darwin.h
/SourceCache/gcc_os/gcc_os-1823/gcc/config/rs6000/darwin.h
Using host-darwin.o for host machine hooks.
/APPLE_LICENSE: line 1: APPLE: command not found
/APPLE_LICENSE: line 2: Version: command not found
/APPLE_LICENSE: line 4: Please: command not found
..
------------------------------------------------------------------------
### gccfast
checking if mkdir takes one argument... yes
/SourceCache/gccfast/gccfast-1626/gcc/config.gcc: line 2971: out_file: command not found
Using `/SourceCache/gccfast/gccfast-1626/gcc/config/i386/i386.c' for machine-specific logic.
Using `/SourceCache/gccfast/gccfast-1626/gcc/config/i386/i386.md' as machine description file.
Using the following target machine macro files:
/SourceCache/gccfast/gccfast-1626/gcc/config/i386/i386.h
/SourceCache/gccfast/gccfast-1626/gcc/config/darwin.h
/SourceCache/gccfast/gccfast-1626/gcc/config/i386/darwin.h
Using host-darwin.o for host machine hooks.
/APPLE_LICENSE: line 1: APPLE: command not found
/APPLE_LICENSE: line 2: Version: command not found
/APPLE_LICENSE: line 4: Please: command not found
/APPLE_LICENSE: line 5: By: command not found
------------------------------------------------------------------------
### gnuserv
#### 9J61
/usr/bin/emacs-undumped -batch -l loadup
--eval "(add-to-list 'load-path ".")"
-l gnuserv-compat -f batch-byte-compile gnuserv-compat.el
dyld: Library not loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
Referenced from: /usr/bin/emacs-undumped
Reason: image not found
DiskImage available??
lib/FVDIHLInterface.h:27:38: error: DiskImages/DIHLInterface.h: No such file or directory
------------------------------------------------------------------------
### ipv6configuration
#### 9J61
libraries/service.c:817: error: 'userNotification' undeclared (first use in this function)
libraries/service.c:834: error: 'CFUserNotificationRef' undeclared (first use in this function)
libraries/service.c:850: error: 'kCFUserNotificationAlertHeaderKey' undeclared (first use in this function)
libraries/service.c:852: error: 'kCFUserNotificationAlertMessageKey' undeclared (first use in this function)
libraries/service.c:854: error: 'kCFUserNotificationLocalizationURLKey' undeclared (first use in this function)
****
------------------------------------------------------------------------
**isoutil**
#### 9J61 (ok)
**problem:** `cd9660.util_main.m:52:28: error: IOKit/IOKitLib.h: No such file or directory`
****
**cp -R /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/* BuildRoot/usr/include/IOKit**
Consequently, next error will be..
**Problem: **c`d9660.util_main.m:757: error: 'kNilOptions' undeclared (first use in this function)`
`cd9660.util_main.m:757: error: (Each undeclared identifier is reported only once`
`cd9660.util_main.m:757: error: for each function it appears in.)`
**Pseudo-solution:** Add in BuildRoot/usr/include/IOKit/IOKitLib.h #include <CarbonCore/MacTypes.h>
Then,
**Problem:** `ld: framework not found IOKit`
`ld: framework not found IOKit`
**PseudoSolution:** install *IOKitUser* from *9F33pd1* using a custom plist:
`darwinbuild -load IOKitUser `
`Downloading http://src.macosforge.org/Roots/9J61//IOKitUser.root.tar.gz ...`
`Downloading http://puredarwin.googlecode.com/svn/Roots/9G55pd1//IOKitUser.root.tar.gz ...`
`Downloading http://puredarwin.googlecode.com/svn/Roots/9F33pd1//IOKitUser.root.tar.gz ...`
`Download complete`
`IOKitUser - 137 files registered.`
**Solution:** `darwinbuild -load IOKitUser` <- unfortunately, it doesn't built without patch
But another problem will come if the default IOKitUser binaryroot from 9F33pd1 is used, because it as been built only for the arch i386. So either building isoutil only for i386 (not tested) or removing the arch restriction on IOKItUser in 9F33pd1 to ppc could work (test).
------------------------------------------------------------------------
### kext_tools
`darwinbuild kext_tools`
#### 9J61 ??
#### 9F33pd1 (ok)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then init:
darwinbuild -init 9F33pd1
The plist file above contains some patches that tend to avoid most of the errors just below.
__Note:__ No BuildRoot alteration, hopefully.
`darwinbuild kext_tools`
**Problem: **`/SourceCache/kext_tools/kext_tools-117/prelink.c:800: error: 'kNilOptions' undeclared (first use in this function)`
**Problem: **/SourceCache/kext_tools/kext_tools-117/bootcaches.c:925: error: 'kNilOptions' undeclared (first use in this function)
****
#ifndef kNilOptions
`#define kNilOptions 0
#endif`
<span style="font-family:courier new;font-size:12px"><span style="font-family:Arial;font-size:13px;font-weight:bold"><span style="font-weight:normal">**Solution:** Add <span>`#include <CarbonCore/MacTypes.h>`</span></span></span></span>
**Problem: **/SourceCache/kext_tools/kext_tools-117/bootcaches.c:143: error: 'nil' undeclared (first use in this function)
/SourceCache/kext_tools/kext_tools-117/bootcaches.c:403: error: 'nil' undeclared (first use in this function)
/SourceCache/kext_tools/kext_tools-117/bootcaches.c:774: error: 'nil' undeclared (first use in this function)
**Solution: **Add #include <objc/objc.h>
Compilation success, let's look the patched `kextcache' binary for "purity" purpose:
`/usr/sbin/kextcache:`
``
`/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)`
`/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)`
`/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
`/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)`
And the Mac OS X `kextcache' binary:
`/usr/sbin/kextcache:`
`/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)`
`/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)`
`/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)`
`/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 34.0.0)`
`/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
`/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)`
**Problem:** /XCD/SY should not be.
**Solution:**
------------------------------------------------------------------------
### launchd
``
#### 9J61 ?
Problem: ERROR: could not find root: IOKitUser
Solution:<span style="font-size:12px;font-weight:normal"> darwinbuild IOKitUser && darwinbuild -load IOKitUser
</span>
#### 9G55
### ?
#### 9F33pd1 (ok)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9F33pd1
The plist file above contains some patches that tend to avoid most of the errors just below.
darwinbuild launchd
**Problem:** `ERROR: could not find root: IOKitUser`
**Pseudo-solution:** <span style="font-family:courier new;font-size:12px">darwinbuild IOKitUser && darwinbuild -load IOKitUser</span>
**Problem:** `dyld: Library not loaded: /usr/lib/libauto.dylib`
` Referenced from: /usr/lib/libobjc.A.dylib`
` Reason: image not found`
**Old-Solution: ******
**Solution:** Good news on 11/12/2008, the AutoZone project sources have been released by Apple: <span style="font-family:courier new,monospace"><span style="font-size:small">darwinbuild autozone && darwinbuild -load autozone</span></span>
**Problem:** `/SourceCache/launchd/launchd-258.18/launchd/src/launchctl.c:37:28: error: IOKit/IOKitLib.h: No such file or directory`
****
**cp -R /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/* BuildRoot/usr/include/IOKit**
**Problem:** `/SourceCache/launchd/launchd-258.18/launchd/src/launchctl.c:73:23: error: bootfiles.h: No such file or directory`
****
__Note:__ See <http://darwinbuild.macosforge.org/trac/ticket/9>
****
/SourceCache/launchd/launchd-258.18/launchd/src/launchctl.c:69:30: error: readline/history.h: No such file or directory
**Solution:** darwinbuild libedit
darwinbuild -load libedit
**Problem: **gcc -no-cpp-precomp -isysroot / -F//System/Library/PrivateFrameworks -Wall -Wextra -Waggregate-return -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror -D__MigTypeCheck=1 -fvisibility=hidden -Dmig_external=__private_extern__ -I//System/Library/Frameworks/System.framework/PrivateHeaders -arch ppc -arch i386 -g -Os -pipe -pipe -no-cpp-precomp -arch ppc -arch i386 -Wl,-syslibroot,/ -framework CoreFoundation -framework IOKit -framework Security -weak_library /usr/lib/libedit.dylib -arch ppc -arch i386 -o launchctl launchctl-launchctl.o
ld: framework not found IOKit
**Solution:** See above for *IOKitUser* project.
**Problem:**` ``/SourceCache/launchd/launchd-258.1/launchd/src/launchd_core_logic.c:76:21: error: sandbox.h: No such file or directory`
**Solution:**` ``cp /usr/include/sandbox.h BuildRoot/usr/include/`
**Problem:** `/SourceCache/launchd/launchd-258.1/launchd/src/SystemStarter.c:159: error: 'kCFNotificationDeliverImmediately' undeclared (first use in this function)`
**Pseudo-Solution:** cp /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFNotificationCenter.h BuildRoot/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/
`#include <CoreFoundation/CFNotificationCenter.h>`
Also comment in from line 156 to line 161 in order to avoid missing symbols
`/*` `CFNotificationCenterPostNotificationWithOptions(`
`CFNotificationCenterGetDistributedCenter(),`
`CFSTR("com.apple.startupitems.completed"),`
`NULL, NULL,`
`kCFNotificationDeliverImmediately | kCFNotificationPostToAllSessions);`
`*/`
__Note:__ This is what is happening about missing symbols:
`Undefined symbols for architecture i386:`
` "_CFNotificationCenterGetDistributedCenter", referenced from:`
` _main in SystemStarter-SystemStarter.o`
` "_CFNotificationCenterPostNotificationWithOptions", referenced from:`
` _main in SystemStarter-SystemStarter.o`
**
**
Compilation pseudo-success: `launchd - 27 files registered.`
`darwinbuild -load launchd`
launchd also works:
`launchd `
`launchd: This program is not meant to be run directly.`
**Problem:** *launchctl* is linked to *CoreFoundation*
**launchctl **
`dyld: Library not loaded: /System/Library/Frameworks/CoreFoundation/Versions/A/CoreFoundation`
` Referenced from: /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit`
` Reason: image not found`
****
/System/Library/Frameworks/CoreFoundation/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then rebuild CF:
<span style="font-family:courier new"><span style="font-size:12px">darwinbuild -init 9F33pd1 && darwinbuild CF && darwinbuild -load CF</span></span>
The plist file above contains some patches that tend to avoid most of the related errors.
After recompilation of CF, dependency is fixed:
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)
**Problem:** `launchctl help`
`dyld: Symbol not found: __kCFBundleResourceSpecificationKey`
` Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security`
` Expected in: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation`
**Solution: **Same problem as investigation below. So we recreate the expected method (empty foobar) in CF to satisfy Security.

__
__
**Comparison with launchd from Darwin 8:**
**
**
****
`/sbin/launchd:`
` /usr/lib/libbsm.dylib (compatibility version 1.0.0, current version 1.0.0)`
` /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
` /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.3)`
Leopard's launchd binary still links to the same three libraries only.
However, there's quite a difference in launchctl between Darwin 8 and 9, as shown below.
Mac OS X 10.4 (Darwin 8):
/bin/launchctl:
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 368.27.0)
/usr/lib/libedit.2.dylib (compatibility version 2.0.0, current version 2.0.0)
` /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
` /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.3)`
Mac OS X 10.5 (Darwin 9):
/bin/launchctl:
` `/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.14.0)
` ``/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)`
` `/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 34102.0.0)
` `/usr/lib/libedit.2.dylib (compatibility version 2.0.0, current version 2.9.0)
` ``/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
`/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)`
PureDarwin (Darwin 9):
`/System/Library/Frameworks/CoreFoundation/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)`
``
`/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 33532.0.0)`
`/usr/lib/libedit.2.dylib (compatibility version 2.0.0, current version 2.9.0)`
`/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
`/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)`
**Problem:** /XCD/SY should not be.
**Solution:** **Please, let us know if you have one.**
------------------------------------------------------------------------
### launchd_libs
#### 9J61 (ok)
**Problem:** mig in XCD related error.
**Solution:** cf above/below.
****
------------------------------------------------------------------------
### libdwarf
`darwinbuild libdwarf`
#### 9J61
?
#### 9G55
**Problem:** `lipo: /SourceCache/libdwarf/libdwarf-8/dwarf/dwarfdump/dwarfdump.i386 and /SourceCache/libdwarf/libdwarf-8/dwarf/dwarfdump/dwarfdump.ppc have the same architectures (i386) and can't be in the same fat output file`
**Solution:** ?
#### 9F33 (ok)
------------------------------------------------------------------------
### libgcc
#### 9J61pd1
/usr/include/stdlib.h:283: error: expected ',' or ';' before '__OSX_AVAILABLE_BUT_DEPRECATED'
>> int daemon(int, int) __DARWIN_1050(daemon) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5,__IPHONE_2_0,__IPHONE_2_0);
>>>
//int daemon(int, int) __DARWIN_1050(daemon) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5,__IPHONE_2_0,__IPHONE_2_0);
int daemon(int, int) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5,__IPHONE_2_0,__IPHONE_2_0);
------------------------------------------------------------------------
### libsecurity_apple_csp
#### 9J61
not present in macosx too:
`lib/FEEKeys.h:34:40: error: security_cryptkit/feeTypes.h: No such file or directory`
`lib/FEEKeys.h:43: error: expected `)' before 'feeKey'`
`lib/FEEKeys.h:53: error: 'feePubKey' does not name a type`
`lib/FEEKeys.h:55: error: 'feePubKey' does not name a type`
patch + <http://lists.apple.com/archives/apple-cdsa/2003/Feb/msg00017.html>
and
__Notes:__ *The current use of FEE by the CSP enables CryptKit routines which need pseudorandom numbers (e.g., signature generation) to obtain pseudorandom data via callbacks specified when calling the relevant function. The callback is defined (as a feeRandFcn) in feeTypes.h. The CSP provides a function in such cases which obtain data from the kernel’s Yarrow implementation, which is believed to be cryptographically secure on the MacOS X platform. All of the CryptKit functions which provide for this callback treat the callback parameter as optional; when not present, CryptKit uses its own FEE-based PRNG.*
then
`/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope`
`/usr/local/SecurityPieces/Frameworks/security_cdsa_utilities.framework/Headers/cssmdbname.h:90: error: 'nil' was not declared in this scope`
**Solution:** Add `#include <CarbonCore/MacTypes.h>` in *BuildRoot/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBase.h*
__Notes:__ See <http://darwinbuild.macosforge.org/trac/ticket/85>
------------------------------------------------------------------------
### libsecurity_cdsa_plugin
#### 9J61 (ok)
**Problem:** `/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h: In static member function 'static void Security::MacOSError::check(OSStatus)':`
`/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope`
<span style="font-family:courier new,monospace"><span style="font-size:small">/usr/local/SecurityPieces/Frameworks/security_cdsa_utilities.framework/Headers/cssmdbname.h: In member function 'bool Security::DbName::operator<(const Security::DbName&) const':</span></span>
`/usr/local/SecurityPieces/Frameworks/security_cdsa_utilities.framework/Headers/cssmdbname.h:90: error: 'nil' was not declared in this scope`
**Solution:** Apply the libsecurityd fix and build libsecurity_utilities
------------------------------------------------------------------------
### libsecurity_cdsa_utilities
#### 9J61
`lib/osxverifier.cpp:27:46: error: security_codesigning/requirement.h: No such file or directory`
`lib/osxverifier.cpp:30:44: error: security_codesigning/reqdumper.h: No such file or directory`
depend on security_codesigning
------------------------------------------------------------------------
### libsecurity_codesigning
#### 9J61
**Problem:** `/bin/sh -c ""/private/var/tmp/libsecurity_codesigning/libsecurity_codesigning-36591.obj/libsecurity_codesigning.build/Requirements Language.build/Script-C2D383B70A23A8C4005C63A2.sh""`
`/private/var/tmp/libsecurity_codesigning/libsecurity_codesigning-36591.obj/libsecurity_codesigning.build/Requirements Language.build/Script-C2D383B70A23A8C4005C63A2.sh: line 6: java: command not found`
**Solution:** `chroot BuildRoot`
??? cf java
But..
Error occurred during initialization of VM
Unable to load native library: libjava.jnilib
+ JavaVM blocker, because linked to Foundation with symbols not provided by PureFoundation.
Consequently codesigning stuff cannot be built. Since a long time.. <http://lists.apple.com/archives/darwin-development/2003/Jan/msg00227.html>
the script in cause:
#!/bin/bash
antlr=/usr/local/bin/antlr.jar
DEBUG=""
mkdir -p $TEMPDIR
rm -f $TEMPDIR/Requirement{Parser,Lexer}*
java -cp "$antlr" antlr.Tool -o $TEMPDIR $DEBUG requirements.grammar
and more, no antlr found.. MacPorts says about:
Description: ANTLR, ANother Tool for Language Recognition, is a language tool that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions
containing Java, C#, or C++ actions.
Homepage: http://www.antlr2.org/
Then trying to build it (libsecurity_codesigning) outside the chroot leads to:
/bin/sh -c ""/Users/aladin/PureDarwin/darwinbuild/9J61/BuildRoot/private/var/tmp/libsecurity_codesigning/libsecurity_codesigning-36591.obj/libsecurity_codesigning.build/Requirements Language.build/Script-C2D383B70A23A8C4005C63A2.sh""
Exception in thread "main" java.lang.NoClassDefFoundError: antlr/Tool
** BUILD FAILED **
So, let's see what can we do we the previous discovered port.
port install antlr
ln -fs /opt/local/lib/antlr.jar /usr/local/bin
lib/cserror.h:30:44: error: security_utilities/cfutilities.h: No such file or directory
lib/cserror.h:31:42: error: security_utilities/debugging.h: No such file or directory
lib/cs.h:33:34: error: Security/SecBasePriv.h: No such file or directory
lib/cs.h:35:43: error: security_utilities/globalizer.h: No such file or directory
lib/cs.h:36:44: error: security_utilities/seccfobject.h: No such file or directory
lib/cs.h:37:40: error: security_utilities/cfclass.h: No such file or directory
lib/cs.h:38:39: error: security_utilities/errors.h: No such file or directory
lib/codedirectory.h:36:39: error: security_utilities/unix++.h: No such file or directory
lib/codedirectory.h:37:37: error: security_utilities/blob.h: No such file or directory
lib/codedirectory.h:39:40: error: security_utilities/hashing.h: No such file or directory
lib/requirement.h:31:42: error: security_utilities/superblob.h: No such file or directory
etc..
lib/bundlediskrep.cpp:25:41: error: CoreFoundation/CFBundlePriv.h: No such file or directory
Remarquable! For the first time, "it's" the contrary:
cp -R BuildRoot/usr/local/SecurityPieces /usr/local/
something from the buildroot finally goes outside!
then
lib/cs.h:33:34: error: Security/SecBasePriv.h: No such file or directory
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/seccfobject.h:29:38: error: CoreFoundation/CFRuntime.h: No such file or directory
To be continued..
------------------------------------------------------------------------
### libsecurity_dotmacdl
#### 9J61
**Problem:** /SourceCache/libsecurity_dotmacdl/libsecurity_dotmacdl-29745/lib/DotMacRelation.cpp:30:39: error: CoreServices/CoreServices.h: No such file or directory
------------------------------------------------------------------------
### libsecurity_filevault
#### 9J61
**Problem:** /usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h: In static member function 'static void Security::MacOSError::check(OSStatus)':
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope
------------------------------------------------------------------------
### libsecurity_keychain
#### 9J61
**Problem:** /private/var/tmp/libsecurity_keychain/libsecurity_keychain-36620.sym/BuiltProducts/SecurityPieces/Headers/Security/SecBase.h:63: error: 'OSType' does not name a type
`/private/var/tmp/libsecurity_keychain/libsecurity_keychain-36620.sym/BuiltProducts/SecurityPieces/Headers/Security/SecBase.h:74: error: 'SecKeychainAttrType' does not name a type`
`/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h: In static member function 'static void Security::MacOSError::check(OSStatus)':`
`/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope`
`/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/cfutilities.h: At global scope:`
`/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/cfutilities.h:443: error: 'noErr' was not declared in this scope`
`/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/cfutilities.h:450: error: 'noErr' was not declared in this scope`
`/private/var/tmp/libsecurity_keychain/libsecurity_keychain-36620.sym/BuiltProducts/SecurityPieces/Headers/Security/SecKeychain.h:78: error: 'FourCharCode' does not name a type`
`/private/var/tmp/libsecurity_keychain/libsecurity_keychain-36620.sym/BuiltProducts/SecurityPieces/Headers/Security/SecKeychain.h:117: error: 'FourCharCode' does not name a type`
`/private/var/tmp/libsecurity_keychain/libsecurity_keychain-36620.sym/BuiltProducts/SecurityPieces/Headers/Security/SecKeychain.h:526: error: 'SecProtocolType' has not been declared`
`/private/var/tmp/libsecurity_keychain/libsecurity_keychain-36620.sym/BuiltProducts/SecurityPieces/Headers/Security/SecKeychain.h:526: error: 'SecAuthenticationType' has not been declared`
**Solution:** Add `#include <CarbonCore/MacTypes.h>` in *BuildRoot/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBase.h*
**Problem:** `lib/KCEventNotifier.h:31:49: error: CoreFoundation/CFNotificationCenter.h: No such file or directory`
**Pseudosolution: cp /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFNotificationCenter.h BuildRoot/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/**
**Problem: **lib/CertificateRequest.cpp:34:41: error: security_dotmac_tp/dotMacTp.h: No such file or directory
**Solution: ...**
**Problem: ...**
**Solution:**
mkdir -p BuildRoot/usr/local/include/security_pkcs12
root@europa:/Users/aladin/PureDarwin/darwinbuild/9J61# cp BuildRoot/private/var/tmp/libsecurity_pkcs12/libsecurity_pkcs12-32085.root/usr/local/SecurityPieces/Frameworks/security_pkcs12.framework/Versions/A/*/* BuildRoot/usr/local/include/security_pkcs12
------------------------------------------------------------------------
### libsecurity_ldap_dl
#### 9J61
**Problem:** /SourceCache/libsecurity_ldap_dl/libsecurity_ldap_dl-30174/lib/DirectoryServices.cpp:266: error: cannot convert 'long unsigned int*' to 'UInt32*' for argument '8' to 'tDirStatus dsGetRecordList(tDirNodeReference, tDataBuffer*, tDataList*, tDirPatternMatch, tDataList*, tDataList*, int, UInt32*, tContextData*)'
<span style="font-size:small">/SourceCache/libsecurity_ldap_dl/libsecurity_ldap_dl-30174/lib/DirectoryServices.cpp: In member function 'void DSNode::Search(DSRecordList&, DSDataList&, DSDataNode&, tDirPatternMatch, DSDataNode&, long unsigned int&, DSContext&)':</span>
/SourceCache/libsecurity_ldap_dl/libsecurity_ldap_dl-30174/lib/DirectoryServices.cpp:279: error: cannot convert 'long unsigned int*' to 'UInt32*' for argument '7' to 'tDirStatus dsDoAttributeValueSearch(tDirNodeReference, tDataBuffer*, tDataList*, tDataNode*, tDirPatternMatch, tDataNode*, UInt32*, tContextData*)'
/SourceCache/libsecurity_ldap_dl/libsecurity_ldap_dl-30174/lib/DirectoryServices.cpp: In member function 'void DirectoryService::CreateNodeList(const char*)':
/SourceCache/libsecurity_ldap_dl/libsecurity_ldap_dl-30174/lib/DirectoryServices.cpp:347: error: cannot convert 'long unsigned int*' to 'UInt32*' for argument '2' to 'tDirStatus dsGetDirNodeCount(tDirReference, UInt32*)'
/SourceCache/libsecurity_ldap_dl/libsecurity_ldap_dl-30174/lib/DirectoryServices.cpp:363: error: cannot convert 'long unsigned int*' to 'UInt32*' for argument '3' to 'tDirStatus dsGetDirNodeList(tDirReference, tDataBuffer*, UInt32*, tContextData*)'
/SourceCache/libsecurity_ldap_dl/libsecurity_ldap_dl-30174/lib/DirectoryServices.cpp:393: error: cannot convert 'long unsigned int*' to 'UInt32*' for argument '3' to 'tDirStatus dsGetDirNodeList(tDirReference, tDataBuffer*, UInt32*, tContextData*)'
**Solution:** Cast & Patch.
------------------------------------------------------------------------
### libsecurity_manifest
#### 9J61
**Problem:** /usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h: In static member function 'static void Security::MacOSError::check(OSStatus)':
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope
Solution:
------------------------------------------------------------------------
### libsecurityd
#### 9J61 (ok)
**Problem:**` /usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h: In static member function 'static void Security::MacOSError::check(OSStatus)':`
`/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope`
<span style="font-family:courier new,monospace"><span style="font-size:small">/usr/local/SecurityPieces/Frameworks/security_cdsa_utilities.framework/Headers/cssmdbname.h: In member function 'bool Security::DbName::operator<(const Security::DbName&) const':</span></span>
`/usr/local/SecurityPieces/Frameworks/security_cdsa_utilities.framework/Headers/cssmdbname.h:90: error: 'nil' was not declared in this scope`
****
`#include <CarbonCore/MacTypes.h>`
Then you should see `** BUILD SUCCEEDED **`
------------------------------------------------------------------------
libstdcxx_
9J61
checking how to run the C preprocessor... /lib/cpp
configure: error: C preprocessor "/lib/cpp" fails sanity check
------------------------------------------------------------------------
### libxml2
libxml2 is a dependency of *xar* and *headerdoc.*
*
*
`darwinbuild libxml2`
#### 9J61 (ok)
**Problem:** `ld: can't open order file: /usr/local/lib/OrderFiles/libxml2.order`
**Solution:** ?? no OrderFiles nor libxml2.order exists on my mac.
`mkdir BuildRoot/usr/local/lib/OrderFiles`
`touch BuildRoot/usr/local/lib/OrderFiles/libxml2.order `
See <http://darwinbuild.macosforge.org/trac/ticket/72>.
------------------------------------------------------------------------
### libxslt
darwinbuild libxslt
#### 9J61 (ok)
could need <span style="font-family:courier new,monospace"><span style="font-size:small">darwinbuild libxml2 && darwinbuild -load xml2</span></span>
------------------------------------------------------------------------
### mDNSResponder
#### 9J61?
.
#### 9F33pd1 (ok)
``
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9F33pd1
The plist file above contains some patches that tend to avoid most of the errors just below.
darwinbuild mDNSResponder
**Problem:** `/SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/mDNSMacOSX.c:913: error: 'kCFUserNotificationStopAlertLevel' undeclared (first use in this function)`
**Solution:** The patch which includes `<CarbonCore/MacTypes.h>` and `<CoreFoundation/CFUserNotification.h>`
**Problem:** /SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/../mDNSCore/mDNSEmbeddedAPI.h:2785: error: size of array 'sizecheck_DNSQuestion' is negative
`/SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/../mDNSCore/mDNSEmbeddedAPI.h:2786: error: size of array 'sizecheck_ZoneData' is negative`
`/SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/../mDNSCore/mDNSEmbeddedAPI.h:2793: error: size of array 'sizecheck_ServiceInfoQuery' is negative`
`/SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/../mDNSCore/mDNSEmbeddedAPI.h:2795: error: size of array 'sizecheck_ClientTunnel' is negative`
**Problem:** /SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/../mDNSCore/uDNS.c:4990: error: size of array 'sizecheck_SearchListElem' is negative
**Problem: **`/SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/../mDNSShared/uds_daemon.c:3958: error: size of array 'sizecheck_registered_record_entry' is negative`
`/SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/../mDNSShared/uds_daemon.c:3959: error: size of array 'sizecheck_service_instance' is negative`
`/SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/../mDNSShared/uds_daemon.c:3962: error: size of array 'sizecheck_reply_state' is negative`
**Solution:** We can comment the problematic lines. **Please, let us know if you have an alternative way.**
**Problem:** `ld: warning in /usr/local/lib/libdnsinfo.a, file is not of required architecture`
`Undefined symbols:`
` "_dns_configuration_copy", referenced from:`
` _mDNSPlatformSetDNSConfig in mDNSMacOSX.o`
` "_dns_configuration_free", referenced from:`
` _mDNSPlatformSetDNSConfig in mDNSMacOSX.o`
`ld: symbol(s) not found`
**Solution:** Rebuild and load *configd* with all the required archs (cf plist).
**Problem:** `/SourceCache/mDNSResponder/mDNSResponder-176.2/mDNSMacOSX/helper.c:303: error: syntax error before 'gNotification'`
**Solution: ?** add `#include <CoreFoundation/CFUserNotification.h>`
------------------------------------------------------------------------
### mDNSResponderSystemLibraries (ok)
`darwinbuild ``mDNSResponderSystemLibraries`
------------------------------------------------------------------------
### msdosfs
#### 9J61 (ok)
`/SourceCache/msdosfs/msdosfs-136.5/msdosfs.kextproj/msdosfs.kmodproj/msdosfs_conv.c:79:22: error: sys/time.h: No such file or directory`
`/SourceCache/msdosfs/msdosfs-136.5/msdosfs.kextproj/msdosfs.kmodproj/msdosfs_conv.c:80:23: error: sys/systm.h: No such file or directory`
`/SourceCache/msdosfs/msdosfs-136.5/msdosfs.kextproj/msdosfs.kmodproj/msdosfs_conv.c:81:24: error: sys/dirent.h: No such file or directory`
`It seems it looks like in XCD ([...]cts/include -I/XCD/SY/Library/Frameworks/Kernel.framework/PrivateHeaders -I/XCD/SY/Library/Frameworks/Kernel.framework/Headers -I/priva[...]) but there is no Kernel.framework originally.`
**Solution:** `chroot BuildRoot `
`ln -s /System/Library/Frameworks/Kernel.framework /XCD/SY/Library/Frameworks/Kernel.framework`
`exit`
then
**Problem:** `/SourceCache/msdosfs/msdosfs-136.5/newfs_msdos.tproj/newfs_msdos.c:55:27: error: sys/disklabel.h: No such file or directory`
Now it looks in XCD again ([...]ude -I/XCD/SY/Library/Frameworks/System.framework/PrivateHeaders -I/priva[...]...)
**Solution:** chroot BuildRoot
`ln -s /System/Library/Frameworks/System.framework XCD/SY/Library/Frameworks/System.framework/`
exit
Though it has been succesfully built, the project remains in XCD (because of inheritance from the compilation which inherits that probably from another project built before).
**Problem:** XCD should not be here.
`** BUILD SUCCEEDED **`
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++`
` BUILD TIME: 0h 0m 10s`
`EXIT STATUS: 0`
`msdosfs - 12 files registered.`
` 40755 0 0 0 ./XCD`
` 40755 0 0 0 ./XCD/SY`
` 40755 0 0 0 ./XCD/SY/Library`
` 40755 0 0 0 ./XCD/SY/Library/Extensions`
` 40755 0 0 0 ./XCD/SY/Library/Extensions/msdosfs.kext`
` 40755 0 0 0 ./XCD/SY/Library/Extensions/msdosfs.kext/Contents`
`5b9a6e0ff3b5cc110a4411d1befd26e7f1e95042 100644 0 0 1050 ./XCD/SY/Library/Extensions/msdosfs.kext/Contents/Info.plist`
` 40755 0 0 0 ./XCD/SY/Library/Extensions/msdosfs.kext/Contents/MacOS`
`da39a3ee5e6b4b0d3255bfef95601890afd80709 100644 0 0 172844 ./XCD/SY/Library/Extensions/msdosfs.kext/Contents/MacOS/msdosfs`
` 40755 0 0 0 ./XCD/SY/Library/Filesystems`
` 40755 0 0 0 ./XCD/SY/Library/Filesystems/msdos.fs`
` 40755 0 0 0 ./XCD/SY/Library/Filesystems/msdos.fs/Contents`
`2260276cf80b31121312a84960b02313b5de152c 100644 0 0 7370 ./XCD/SY/Library/Filesystems/msdos.fs/Contents/Info.plist`
` 40755 0 0 0 ./XCD/SY/Library/Filesystems/msdos.fs/Contents/Resources`
` 40755 0 0 0 ./XCD/SY/Library/Filesystems/msdos.fs/Contents/Resources/English.lproj`
`7fba01433478b730cb5223e8020f73f238175537 100644 0 0 652 ./XCD/SY/Library/Filesystems/msdos.fs/Contents/Resources/English.lproj/InfoPlist.strings`
`a0d40033156fff78a4da42fc71d6610cbf8e4375 100755 0 0 45996 ./XCD/SY/Library/Filesystems/msdos.fs/msdos.util`
` 40755 0 0 0 ./sbin`
`91567a895ccaf37aefaf038859e349643d2304ae 100755 0 0 70668 ./sbin/fsck_msdos`
`d90105816c3bcca49c590d567b953d53517da82e 100755 0 0 38556 ./sbin/mount_msdos`
`9419c51c15a47d4d68942272f3dff58640f1457f 100755 0 0 54284 ./sbin/newfs_msdos`
` 40755 0 0 0 ./usr`
` 40755 0 0 0 ./usr/share`
` 40755 0 0 0 ./usr/share/man`
` 40755 0 0 0 ./usr/share/man/man8`
`9bf0b30b84ac2c58fdc021cb52d91bb6b65515f4 100644 0 0 3856 ./usr/share/man/man8/fsck_msdos.8`
`a8f9318a3d0558133ffc70bac75f013153cd8e70 100644 0 0 4080 ./usr/share/man/man8/mount_msdos.8`
`5ae5813033108e545cc0241ac25dda3935c2415e 100644 0 0 1864 ./usr/share/man/man8/msdos.util.8`
`b2ad8ef73fcc0f64b6ad4ed0852f336956d2ee3e 100644 0 0 5579 ./usr/share/man/man8/newfs_msdos.8`
**Solution:** **let us now if you have one**
------------------------------------------------------------------------
### netinfo
#### 9J61 (ok)
**Problem:** `nibind_prot.x:1: error: netinfo/nibind_prot.x: No such file or directory`
`ni_prot.x:1: error: netinfo/ni_prot.x: No such file or directory`
**Solution:** ..According to DTrace, nibind_prot.x is searched in many locations:
` 0 17720 open:entry cc1 nibind_prot.x`
` 0 17720 open:entry cc1 /usr/local/include/netinfo/nibind_prot.x`
` 0 17720 open:entry cc1 /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/netinfo/nibind_prot.x`
` 0 17720 open:entry cc1 /usr/include/netinfo/nibind_prot.x`
So the trick would be to `touch BuildRoot/usr/local/include/netinfo/ni_prot.x BuildRoot/usr/local/include/netinfo/nibind_prot.x`
Do not use the real .x and its content, it will lead to a too deep nested include error.
**Problem:** `ld: can't open order file: /AppleInternal/OrderFiles/NetInfo.order`
`ld: can't open order file: /AppleInternal/OrderFiles/NetInfo.order`
**Solution:** `mkdir -p BuildRoot/AppleInternal/OrderFiles`
`touch BuildRoot/AppleInternal/OrderFiles/NetInfo.order`
------------------------------------------------------------------------
net_snmp
9J61
gcc -dynamiclib -single_module ${wl}-undefined ${wl}dynamic_lookup -o .libs/libnetsnmpagent.15.1.2.dylib .libs/snmp_agent.o .libs/snmp_vars.o .libs/agent_read_config.o .libs/agent_registry.o .libs/agent_index.o .libs/agent_trap.o .libs/kernel.o .libs/agent_handler.o mibgroup/snmpv3/.libs/usmConf.o mibgroup/agentx/.libs/master.o mibgroup/agentx/.libs/subagent.o mibgroup/utilities/.libs/execute.o mibgroup/utilities/.libs/iquery.o mibgroup/mibII/.libs/vacm_conf.o mibgroup/agentx/.libs/protocol.o mibgroup/agentx/.libs/client.o mibgroup/agentx/.libs/master_admin.o mibgroup/agentx/.libs/agentx_config.o ../snmplib/.libs/libnetsnmp.dylib -arch ppc -arch i386 -F/System/Library/PrivateFrameworks/ -F/System/Library/Frameworks/ -arch ppc -arch i386 -arch ppc -arch i386 -framework IOKit -framework CoreFoundation -framework CoreServices -framework ApplicationServices -framework DiskArbitration -install_name /usr/lib/libnetsnmpagent.15.dylib -compatibility_version 17 -current_version 17.2 -Wl,-single_module
ldld:: framework not found CoreServices
------------------------------------------------------------------------
### ntfs
#### 9J61 (ok)
**Problem:**
`/SourceCache/ntfs/ntfs-52/kext/ntfs_vfsops.c:44:23: error: sys/cdefs.h: No such file or directory`
`/SourceCache/ntfs/ntfs-52/kext/ntfs_vfsops.c:45:22: error: sys/attr.h: No such file or directory`
`/SourceCache/ntfs/ntfs-52/kext/ntfs_vfsops.c:46:21: error: sys/buf.h: No such file or directory`
`/SourceCache/ntfs/ntfs-52/kext/ntfs_vfsops.c:47:22: error: sys/disk.h: No such file or directory`
`/SourceCache/ntfs/ntfs-52/kext/ntfs_vfsops.c:48:23: error: sys/errno.h: No such file or directory`
`/SourceCache/ntfs/ntfs-52/kext/ntfs_vfsops.c:49:23: error: sys/fcntl.h: No such file or directory`
It also seek into: [...]lude -I/XCD/SY/Library/Frameworks/Kernel.framework/PrivateHeaders -I/XCD/SY/Library/Frameworks/Kernel.framework/Headers -I/pri[...]
**Solution:** see below/above (copy/link required headers).
------------------------------------------------------------------------
### objc4
#### 9J61 (ok)
#### 9F33 (ok)
Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9F33pd1
The plist file above contains some patches that tend to avoid most of the errors just below.
`darwinbuild objc4`
**Problem:** `/SourceCache/objc4/objc4-371.2/runtime/objc-private.h:49:22: error: auto_zone.h: No such file or directory`
<span style="font-family:Helvetica;font-weight:bold">Solution: <span style="color:rgb(255,0,0);font-family:Arial"><span style="font-size:small"><span style="color:rgb(0,0,0);font-weight:normal">11/12/2008, the AutoZone project sources have been released by Apple: <span style="font-family:courier new"><span style="font-size:12px">darwinbuild autozone && darwinbuild -load autozone</span></span></span> </span></span></span>
**Problem:** `couldn't exec /XCD/loper/usr/bin/libtool: No such file or directory`
**Solution: `**cp' or `ln' -s from `usr/bin/libtool`
In fact, the patches remove the *libauto* dependency and *libobjc* is now "pure":
__
__
`otool -L /usr/lib/libobjc.A.dylib`
`/usr/lib/libobjc.A.dylib:`
`/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)`
`/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)`
`/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)`
Of course, we still need and hope to have GC support a day.
11/12/2008, the AutoZone project sources have been released by Apple: <span style="font-family:courier new"><span style="font-size:12px"><span style="color:rgb(204,204,204)">darwinbuild autozone && darwinbuild -load autozone</span></span></span>
------------------------------------------------------------------------
### pam_modules
#### 9J61
**Problem: **`/private/var/tmp/pam_modules/pam_modules-36.2.obj/pam_serialnumber/pam_serialnumber.c:40:46: error: AppleSystemInfo/ASI_SerialNumber.h: No such file or directory/private/var/tmp/pam_modules/pam_modules-36.2.obj/pam_serialnumber/pam_serialnumber.c:40:46:`
` error: AppleSystemInfo/ASI_SerialNumber.h: No such file or directory`
****
` 0 17720 open:entry cc1 /usr/include/pam/AppleSystemInfo/ASI_SerialNumber.h`
` 0 17720 open:entry cc1 /usr/local/include/AppleSystemInfo/ASI_SerialNumber.h`
` 0 17720 open:entry cc1 /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/AppleSystemInfo/ASI_SerialNumber.h`
` 0 17720 open:entry cc1 /usr/include/AppleSystemInfo/ASI_SerialNumber.h`
` 1 17720 open:entry cc1 /usr/include/pam/AppleSystemInfo/ASI_SerialNumber.h`
` 1 17720 open:entry cc1 /usr/local/include/AppleSystemInfo/ASI_SerialNumber.h`
` 1 17720 open:entry cc1 /usr/lib/gcc/powerpc-apple-darwin9/4.0.1/include/AppleSystemInfo/ASI_SerialNumber.h`
` 1 17720 open:entry cc1 /usr/include/AppleSystemInfo/ASI_SerialNumber.h`
Then
`mkdir -p BuildRoot/usr/include/pam/AppleSystemInfo`
`touch BuildRoot/usr/include/pam/AppleSystemInfo/ASI_SerialNumber.h`
This leads to:
`/usr/bin/cc -lpam -pipe -no-cpp-precomp -arch ppc -arch i386 -L/usr/local/lib -lAppleSystemInfo -framework CoreFoundation -framework IOKit -g -Os -pipe -Ddarwin -no-cpp-precomp -Wall -I/usr/include/pam -pipe -no-cpp-precomp -arch ppc -arch i386 -bundle -o /private/var/tmp/pam_modules/pam_modules-36.2.obj/pam_serialnumber/pam_serialnumber.so /private/var/tmp/pam_modules/pam_modules-36.2.obj/pam_serialnumber/pam_serialnumber.o`
`ld: library not found for -lAppleSystemInfo`
****
****
__Notes:__ no path with *AppleSystemInfo* as a directory exist on my mac (10.5.7).
See <http://darwinbuild.macosforge.org/trac/ticket/79>
------------------------------------------------------------------------
### passwordserver_saslkerberos
#### 9J61
ld: warning in /usr/lib/libkrb5.dylib, missing required architecture ppc64 in file
ld: warning in /usr/lib/libSystemStubs.a, missing required architecture ppc64 in file
Undefined symbols:
"_gss_wrap", referenced from:
_sasl_gss_encode in gssapi.o
------------------------------------------------------------------------
### postfix
#### 9J61
xsasl_cyrus_server.c:77:18: error: sasl.h: No such file or directoryxsasl_cyrus_server.c:77:18: error: sasl.h: No such file or directory
xsasl_cyrus_server.c:78:22: xsasl_cyrus_server.c:78:22:error: saslutil.h: No such file or directory
------------------------------------------------------------------------
### pdisk
#### 9J61 (ok)
**Problem:** `/SourceCache/cron/cron-30/cron/do_command.c:38:28: error: IOKit/IOKitLib.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:39:35: error: IOKit/pwr_mgt/IOPMLib.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:40:32: error: IOKit/pwr_mgt/IOPM.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:41:28: error: IOKit/IOReturn.h: No such file or directory`
`/SourceCache/cron/cron-30/cron/do_command.c:38:28: error: IOKit/IOKitLib.h: No such file or directory`
`need IOKitUser`
------------------------------------------------------------------------
### ruby
<span style="font-family:Helvetica;font-size:12px"><span style="font-size:13px"><span style="font-family:arial">(Implicitly needed for copystrings & copyplist in </span></span>**IOKitUser**) and explicitly needed for many projects using ruby scripts.</span>
#### 9J61
**Problem:**
**Solution:** rebuild SystemStubs with a custom plist including all arch.
#### 9G55
**** `ld: couldn't dlopen() /usr/lib/libdtrace.dylib: dlopen(/usr/lib/libdtrace.dylib, 1): image not found`
**Solution:** <span style="font-family:courier new,monospace"><span style="font-size:small">darwinbuild dtrace && darwinbuild -load dtrace</span></span>
#### 9F33
**** `ld: couldn't dlopen() /usr/lib/libdtrace.dylib: dlopen(/usr/lib/libdtrace.dylib, 1): image not found`
**Solution:** <span style="font-family:courier new,monospace"><span style="font-size:small">darwinbuild dtrace && darwinbuild -load dtrace</span></span>
**Problem: **Symbolication error..
**Solution:** **Please, let us know if you have one!**

------------------------------------------------------------------------
### security_ocspd
9J61
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h: In static member function 'static void Security::MacOSError::check(OSStatus)':
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope
------------------------------------------------------------------------
### securityd
9J61
src/acls.h:40:39: error: securityd_server/sscommon.h: No such file or directory
src/dbcrypto.h:31:37: error: securityd_client/ssblob.h: No such file or directory
src/notifications.h:34:39: error: securityd_client/ssclient.h: No such file or directory
src/SharedMemoryServer.h:8:49: error: securityd_client/SharedMemoryCommon.h: No such file or directory
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h: In static member function 'static void Security::MacOSError::check(OSStatus)':
/usr/local/SecurityPieces/Frameworks/security_utilities.framework/Headers/errors.h:103: error: 'noErr' was not declared in this scope.
------------------------------------------------------------------------
### screen
#### 9J61 (ok)
**Problem:**
`/SourceCache/screen/screen-12/screen/screen.c:105:19:/SourceCache/screen/screen-12/screen/screen.c:105:19: error: error: vproc.h: No such file or directory`
`/SourceCache/screen/screen-12/screen/screen.c:106:24: error: vproc_priv.h: No such file or directory`
`/SourceCache/screen/screen-12/screen/screen.c:106:24: error: vproc_priv.h: No such file or directory`
**Solution:** `cp -R BuildRoot/private/var/tmp/launchd_libs/launchd_libs-258.22.root/usr/include/* BuildRoot/usr/include/
`
`cp -R BuildRoot/private/var/tmp/launchd_libs/launchd_libs-258.22.root/usr/local/include/* BuildRoot/usr/local/include/`
------------------------------------------------------------------------
### smb
#### 9J61
**Problem:** /SourceCache/smb/smb-348.7/lib/smb/ctx.c:45:31: error: URLMount/URLMount.h: No such file or directory
/SourceCache/smb/smb-348.7/lib/smb/ctx.c:49:39: error: CoreServices/CoreServices.h: No such file or directory
/SourceCache/smb/smb-348.7/lib/smb/ctx.c:50:37: error: CFNetwork/CFNetServices.h: No such file or directory
/SourceCache/smb/smb-348.7/lib/smb/ctx.c:51:87: error: CFNetwork/CFNetServicesPriv.h: No such file or directory
------------------------------------------------------------------------
### subversion
#### 9J61
**Problem:** checking for Apache module support via DSO through APXS... /SourceCache/subversion/subversion-16/subversion/configure: line 3130: apxs: command not found
configure: error: no - APXS refers to an old version of Apache
Unable to locate /mod_dav.h
------------------------------------------------------------------------
### syslog
#### 9J61
**Problem:** ===== Building aslmanager RELEASE =====
/usr/bin/cc -arch ppc -arch i386 -g -Os -pipe -Wall -mdynamic-no-pic -DINET6 -pipe -no-cpp-precomp -arch ppc -arch i386 -I/private/var/tmp/syslog/syslog-69.0.4.obj/aslmanager -c -o /private/var/tmp/syslog/syslog-69.0.4.obj/aslmanager/aslmanager.o aslmanager.c
===== Linking aslmanager RELEASE =====
/usr/bin/cc -arch ppc -arch i386 -dead_strip -o /private/var/tmp/syslog/syslog-69.0.4.sym/aslmanager
/private/var/tmp/syslog/syslog-69.0.4.obj/aslmanager/aslmanager.o
Undefined symbols for architecture ppc:
"_asl_file_close", referenced from:
_do_match in aslmanager.o
_do_match in aslmanager.o
_do_match in aslmanager.o
"_asl_file_open_write", referenced from:
_do_match in aslmanager.o
"_asl_file_open_read", referenced from:
_do_match in aslmanager.o
"_asl_file_save", referenced from:
_do_match in aslmanager.o
"_asl_file_match", referenced from:
_do_match in aslmanager.o
ld: symbol(s) not found for architecture ppc
collect2: ld returned 1 exit status
Undefined symbols for architecture i386:
"_asl_file_close", referenced from:
_do_match in aslmanager.o
_do_match in aslmanager.o
_do_match in aslmanager.o
_do_match in aslmanager.o
"_asl_file_open_write", referenced from:
_do_match in aslmanager.o
"_asl_file_open_read", referenced from:
_do_match in aslmanager.o
"_asl_file_save", referenced from:
_do_match in aslmanager.o
"_asl_file_match", referenced from:
_do_match in aslmanager.o
ld: symbol(s) not found for architecture i386
------------------------------------------------------------------------
### system_cmds
#### 9J61
Problem:
Referenced from: /usr/bin/arch
Reason: image not found
gcc-4.0: Invalid arch name : -D__MACH30__
**Solution:** `darwinbuild -load system_cmds` (also add manually [PureFoundation](/archive/developers/PureFoundation.md).root.tar.bz2 in order to satisfy arch dependency to Foundation.framework)
dynamic_pager.c:35:42: error: IOKit/pwr_mgt/IOPMLibPrivate.h: No such file or directory
dynamic_pager.c:36:37: error: IOKit/ps/IOPowerSources.h: No such file or directory
dynamic_pager.c:37:44: error: IOKit/ps/IOPowerSourcesPrivate.h: No such file or directory
darwinbuild -headers IOKitUser
#### 9G55
#### 9F33
**Problem:** `dynamic_pager.c:35:42: error: IOKit/pwr_mgt/IOPMLibPrivate.h: No such file or directory`
`dynamic_pager.c:36:37: error: IOKit/ps/IOPowerSources.h: No such file or directory`
`dynamic_pager.c:37:44: error: IOKit/ps/IOPowerSourcesPrivate.h: No such file or directory`
`dynamic_pager.c:569: error: 'kIOMasterPortDefault' undeclared (first use in this function)`
`dynamic_pager.c:569: error: (Each undeclared identifier is reported only once`
`dynamic_pager.c:569: error: for each function it appears in.)`
`dynamic_pager.c:570: error: 'kIOReturnSuccess' undeclared (first use in this function)`
`dynamic_pager.c:582: error: syntax error before 'kIOPMBatteryPowerKey'`
``
`darwinbuild -headers IOKitUser`
darwinbuild IOKitUser
darwinbuild -load IOKitUser
chroot BuildRoot
cp -R /XCD/SY/Library/Frameworks/IOKit.framework /System/Library/Frameworks
cp -R /System/Library/Frameworks/IOKit.framework.origin/* /System/Library/Frameworks/IOKit.framework/
``
``
Since Foundation is not part of Darwin, we need to patch the source so that it doesn't need Foundation any more (Sometimes older versions of the same source can give a hint).
Alternative Solution: [PureFoundation](/archive/developers/PureFoundation.md) can be added manually to satisfy arch dependency to *Foundation.framework*.
root@europa:/Volumes/Builds/9G55/BuildRoot# mv PureFoundation/Foundation.framework System/Library/Frameworks
root@europa:/Volumes/Builds/9G55/BuildRoot# chroot .
europa# arch
NSObject +load
i386
**Problem: arch**
``
` Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security`
` Expected in: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation`
****
`mv /usr/bin/arch /usr/bin/arch.origin`
`echo 'uname -p' > /usr/bin/arch`
`chmod +x /usr/bin/arch`
**Alterative-solution:** Satisfy the expected dependency with a patched CF-lite.
**
**
Let's look the dependencies of `arch' with `otool'.
otool -L /usr/bin/arch
` [...]`
`/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation...`
[...]
`/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation...`
> > otool -L /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
> > [...]<span style="color:rgb(68,68,68)">
> > </span><span style="color:rgb(68,68,68)">
> > </span><span style="font-family:Helvetica;font-size:12px"> <span style="font-family:courier new"><span style="color:rgb(68,68,68)">[...]
> > </span></span></span>
> > > > otool -L /System/Library/Frameworks/Security.framework/Versions/A/Security
> > > > <span style="color:rgb(68,68,68)">
> > > > </span> /usr/lib/libstdc++.6.dylib...<span style="color:rgb(68,68,68)">
> > > > </span> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation...<span style="color:rgb(68,68,68)">
> > > > </span> /usr/lib/libgcc_s.1.dylib...<span style="color:rgb(68,68,68)">
> > > > </span> /usr/lib/libSystem.B.dylib...
*
*
**
grep kCFBundleResourceSpecificationKey /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
Binary file /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation matches
In the BuildRoot, CF-lite returns nothing.
grep kCFBundleResourceSpecificationKey /Volumes/Builds/9F33/BuildRoot/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
So we have mainly three choices:
-
-
- to short-circuit `arch'
We use *CF-lite*, but this time it seems to light.
A workaround in this case consists to recreate the missing prototype and method *_kCFBundleResourceSpecificationKey* expected in *CF-lite*, build and then deploy it.
The real state looks like:

In fact, there is also **Foundation.framework missing**.
**Solution: **See PureFoundation. e.g., with arch:
`root@europa:/Volumes/Builds/``9G55/BuildRoot# mv PureFoundation/Foundation.``framework System/Library/Frameworks`
`root@europa:/Volumes/Builds/``9G55/BuildRoot# chroot .
europa# arch
NSObject +load
i386`
------------------------------------------------------------------------
### tcl
`darwinbuild tcl`
****
#### 9J61
#### 9G55
Fetch [9G55pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9G55pd1.plist) into *.build* directory of your DarwinBuild repository, then:
darwinbuild -init 9G55pd1
The plist file above contains some patches that tend to avoid some errors.
`darwinbuild tcl`
****
`Compiler: /XCD/loper/Library/Xcode/Plug-ins/GCC 4.0.xcplugin/Contents/Resources/gcc`
`Reason: sh: /XCD/loper/Library/Xcode/Plug-ins/GCC 4.0.xcplugin/Contents/Resources/gcc: No such file or directory`
****
**
**
****
****
**
**
**Problem: **`dyld: Library not loaded: /System/Library/Frameworks/CoreFoundation/Versions/A/CoreFoundation
Referenced from: /private/var/tmp/tcl/tcl-64.sym/tcl/tclsh8.4
Reason: image not found`
**Solution:** Fetch [9F33pd1.plist](http://code.google.com/p/puredarwin/source/browse/trunk/plists/9F33pd1.plist) into *.build* directory of your DarwinBuild repository, then rebuild CF:
<span style="font-family:courier new"><span style="font-size:12px">darwinbuild -init 9F33pd1 && darwinbuild CF && darwinbuild -load CF</span></span>
After recompilation of CF, dependency is fixed:
`/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)`
**Next solution: **See <http://darwinbuild.macosforge.org/trac/ticket/41#comment:1> / [rdar://problem/6488974](http://rdar://problem/6488974)
------------------------------------------------------------------------
### tcl_ext
9J61
/private/var/tmp/tcl_ext/tcl_ext-64.sym/SRC/tcl/tcl/macosx/../unix/../compat/strstr.c:67: error: 'NULL' undeclared (first use in this function)
------------------------------------------------------------------------
### tcl_tk
9J61
/private/var/tmp/tcl_tk/tcl_tk-64.sym/SRC/tcl/tcl/macosx/../unix/../compat/strstr.c:67: error: 'NULL' undeclared (first use in this function)
------------------------------------------------------------------------
### tidy
#### 9J61 (ok)
**Problem:** `ld: can't open order file: /usr/local/lib/OrderFiles/libtidy.order`
**Solution:** `touch BuildRoot/usr/local/lib/OrderFiles/libtidy.order`
then
`++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++`
` BUILD TIME: 0h 0m 43s`
`EXIT STATUS: 0`
------------------------------------------------------------------------
### usertemplate
#### 9J61 (ok)
**Problem:** `/bin/sh: /Developer/Tools/SetFile: No such file or directory`
**Solution: **SetFile appears to not be available.
`ln -fs /usr/bin/true /Developer/Tools/SetFile`
Then it builds.
------------------------------------------------------------------------
### webdavfs
#### 9J61
**Problem: **dependency on cocoa header
/SourceCache/webdavfs/webdavfs-252.8/webdav_cert_ui.tproj/webdav_cert_ui_Prefix.pch:29:28: error: Cocoa/Cocoa.h: No such file or directory
------------------------------------------------------------------------
### xnu
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#### 9J61 (ok)
.
#### 9G55 (ok)
.
#### 9F33
<span style="font-size:12px;font-weight:normal"><span style="color:rgb(153,153,153)"><span style="color:rgb(0,0,0)">**Problem (9F33): **/bin/sh: /usr/local/bin/ctfmerge: No such file or directory
**Solution:** It needs libdwarf and libelf
**Problem (9F33)****:**</span>/</span>usr/local/bin/ctfmerge -l xnu -o /private/var/tmp/xnu/xnu-1228.7.58.obj/RELEASE_I386/./mach_kernel.ctfsys........</span>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
`[...]`
`install: /private/var/tmp/xnu/xnu-1228.7.58.obj/RELEASE_I386/./mach_kernel.sys.dSYM/./Contents/Resources/DWARF//mach_kernel.sys: No such file or directory`
`make[2]: *** [/private/var/tmp/xnu/xnu-1228.7.58.sym/mach_kernel] Error 71`
`make[2]: *** Waiting for unfinished jobs....`
`WARNING: ctfmerge: Can't read input file /private/var/tmp/xnu/xnu-1228.7.58.obj/RELEASE_I386/*/RELEASE/*.*o.ctf: No such file or directory`
`ERROR: ctfmerge: Some input files were inaccessible`
`Removing /private/var/tmp/xnu/xnu-1228.7.58.obj/RELEASE_I386/./mach_kernel.ctfsys`
`install: /private/var/tmp/xnu/xnu-1228.7.58.obj/RELEASE_I386/./mach_kernel.ctfsys: No such file or directory`
`make[2]: *** [/private/var/tmp/xnu/xnu-1228.7.58.root/mach_kernel] Error 71`
**Solution: ?**
------------------------------------------------------------------------
### xar
`darwinbuild xar`
#### 96J1 (ok)
darwinbuild -load libxml2 is needed
------------------------------------------------------------------------
### zsh
`darwinbuild zsh`
****
#### 96J1 (ok)
#### 9G55 (ok)
------------------------------------------------------------------------
To be continued…
Deploying DarwinBuild on PureDarwin
This page is about attempting to run DarwinBuild on a PureDarwin system (consequently, making PureDarwin a bit more self-hosted).
Get Darwinbuild
Homebrew
As of 2015, Darwinbuild can be installed using Homebrew, however it fails.
brew install --HEAD homebrew/head-only/darwinbuild
(...)
==> Installing darwinbuild from homebrew/homebrew-head-only
==> Cloning http://svn.macosforge.org/repository/darwinbuild/trunk/
==> Patching
patching file common.mk
==> xcodebuild -configuration Release install DSTROOT=/ PREFIX=/usr/local/Cellar/darwinbuild/HEAD SYMROOT=build
The following build commands failed:
CompileC build/darwinbuild.build/Release/darwinxref.build/Objects-normal/x86_64/cfutils.o darwinxref/cfutils.c normal x86_64 c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)
READ THIS: https://git.io/brew-troubleshooting
If reporting this issue please do so at (not Homebrew/homebrew):
https://github.com/homebrew/homebrew-head-only/issues
This bug is disucssed on https://github.com/Homebrew/homebrew-head-only/issues/152
SVN
svn co http://svn.macosforge.org/repository/darwinbuild/trunk darwinbuild
MacPorts
port archive darwinbuild
DarwinBuild
Unfortunately, there is no darwinbuild project in darwinbuild:
darwinbuild darwinbuild
ERROR: project not found: darwinbuild
Somebody needs to fix that (TODO: add darwinbuild)
Compiling Darwinbuild in a PureDarwin chroot
See Deploying MacPorts on PureDarwin for some prerequisites (gcc stuff and some usefull dev tools).
cd /Volumes/PureDarwin
# These dependencies will be needed:
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/libdyld.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/Libsyscall.root.tar.gz
We will temporary grab an old trick used by darwinbuild previously in order to avoid some project to raise this error:
/bin/sh: dsymutil: command not found
chroot .
cp /usr/bin/true /usr/bin/dsymutil
LDFLAGS=-L/opt/local/lib make
make install
cd somewhere
darwinbuild -init <build version>
Integrating patches and additional sources
This page describes how to create a custom plist that inherits from another plist, but adds some new sources and patches.
# Create the patch
cd BuildRoot/SourceCache/launchd
cp launchd-258.1/ launchd-258.1.pd1/
# do the editing...
diff -ru launchd-258.1/ launchd-258.1.pd1/ > ../../../Sources/launchd-258.1.p1.patch
cd -
# Apply the patch
cd Sources/
tar xfvz launchd-258.1.tar.gz
cd launchd-258.1/
patch -p1 -r . < ../launchd-258.1.p1.patch
# can then add this patch to the plist as described below, so that it gets applied automatically by DarwinBuild
Why use a custom plist?
By default, DarwinBuild uses the sources that are specified in the .plist (property list) files that describe each build version. It is, however, possible to define a new build version that incorporates certain changes, such as entirely new/different source files or even patches.
This is useful for downstream projects like PureDarwin, since we can take most of the upstream’s codebase and customize (or “subclass”) it. By doing so, we inherit a working build system as well.
Editing plists
Property list files can be edited using any text editor. On Mac OS X, they can also be comfortably edited with the Property List Editor that comes with Xcode Tools. Mac OS X also comes with plutil, a command line tool that can be used to verify that the syntax of a plist file is correct.
Sample custom plist
Below is an example that shows how to specify patchfiles or entirely new source tarballs. In .build/, you would have to create a new file called 9C31pd1.plist in addition to the 9C31.plist that is already there, with the following content (this is just an example):
// !$*UTF8*$!
{
build = 9C31pd1;
inherits = 9C31;
projects = {
xnu = {
patchfiles = (
"xnu-1228.3.13_pd1.p1.patch",
);
};
boot = {
version = "132_dfe_r122";
source_sites = (
"http://tgwbd.org/darwin/downloads/",
);
};
};
source_sites = (
"http://src.macosforge.org/Projects/",
"http://src.puredarwin.org/",
);
}
To make DarwinBuild use the new plist, you have to
darwinbuild -init 9C31pd1
Now DarwinBuild will use the modifications specified in the file above. Specifically:
- Everything is inherited from 9C31.plist, except for the PureDarwin-specific changes defined in this file, 9C31pd1.plist
- When you do “darwinbuild xnu”, then DarwinBuild will attempt to download a patch from http://src.macosforge.org/Projects/xnu-1228.3.13-pd1.p1.patch and (if it does not exist there) from http://src.puredarwin.org/xnu-1228.3.13-pd1.p1.patch (in that order), and apply that patch to xnu prior to building xnu
- When you do “darwinbuild build”, then DarwinBuild will attempt to download the sources from http://tgwbd.org/darwin/downloads/boot-132_dfe_r122.tar.gz instead of the usual source location.
File name conventions
DarwinBuild assumes certain conventions are met with regard to filenames.
- If you have a source tarball, it should be named projectname-version.tar.gz
Note that a version must always be specified, added to the project name (upper/lowercase matters) with a dash, and followed by
.tar.gzExample:ACPIPS2Nub-1.tar.gz - If you have a patch, it should be named with the name, a dash, version, followed by
.p0.patchExample:boot-132_dfe_r122.p0.patch - If you have a set of patches for a given project, make a tarball named
project-version-patches.tar.gz, which extracts to project-version-patches. DarwinBuild will then apply each of the patches in that directory. Example:boot-132-patches.tar.gzOtherwise DarwinBuild will be unable to download, unpack, patch, and build the sources as intended.
xref
The xref database by DarwinBuild is roughly the equivalent to a package manager database on other systems. This page is intended to describe what is in the xref database, and how to use it.
xref.db file format
The file xref.db is located in the .build directory of your DarwinBuild working directory (the one that contains BuildRoot, among other things). It is a mysql3 database file, which makes it convenient to open end edit using mysql3 (which comes with Leopard):
sqlite3 .build/xref.db
You can now use sqlite SQL commands. However, you should limit yourself to read operations.
darwinxref
darwinxref is the command line client for the xref database that comes with DarwinBuild. It abstracts from the actual sqlite3 commands.
For example, to get a list of all the files contained in your BuildRoot and which projects they belong to, do:
darwinxref exportFiles > darwinxref.exportFiles.txt
This is handy to keep around.
darwinxref binary_sites
This command shows the URL(s) from which binary roots are tried to be downloaded. For example:
darwinxref binary_sites http://src.macosforge.org/Roots/9A581/ Since each individual project can specify additional binary_sites, you can also pass the name of a certain project to it:
darwinxref binary_sites xnu http://src.macosforge.org/Roots/9A581/ http://some.more.specific.to.xnu
darwinxref source_sites
This command shows the URL(s) from which source packages are tried to be downloaded. For example:
darwinxref source_sites
http://src.macosforge.org/Projects/
Since each individual project can specify additional binary_sites, you can also pass the name of a certain project to it as in the binary_sites example.
darwinxref patchfiles
Shows patchfiles that will be applied to a project, if any. For Example:
sh-3.2# darwinxref patchfiles xnu
(more text to be written)
darwinxref dependencies
Shows build-time or run-time dependencies of a given project, For example:
sh-3.2# darwinxref dependencies -build boot
shows a (recursive) list of build-time dependencies of the boot project.
(more text to be written)
darwinxref plug-ins
darwinxref functionality can be extended by plug-ins. See descrip.txt for the currently available ones.
Contents of xref.db
The xref database contains the following tables, with the following fields:
files
- build
- project
- path groups
- build
- name
- member mach_o_objects
- serial
- magic
- type
- cputype
- cpusubtype
- flags
- build
- project
- path mach_o_symbols
- mach_o_object
- type
- value
- name properties
- build
- project
- property
- key
- value unresolved_dependencies
- build
- project
- type
- dependency
To be continued Would it make sense to base a package manager on xref.db, darwinup and some package format like xar?
Using MacPorts
MacPorts, formerly known as DarwinPorts, is a variant of the BSD ports system for Darwin and Mac OS X. This page describes how to use MacPorts to create binary packages that can be deployed to PureDarwin. We now have MacPorts running on PureDarwin itself. Deploying MacPorts on a PureDarwin system and building binaries there is preferable, since you will save a lot of hassle.
Prerequisites
For MacPorts, you need
- An Intel-based Macintosh with Mac OS X 10.5 Leopard (latest version)
- Xcode Tools
- X11 (optional?)
The actual requirements might be less than that, but this is the configuration currently tested and used by us. At a later time, we might attempt to use MacPorts on the PureDarwin system itself, but at this time our approach is to build binaries using MacPorts on the Mac and deploy these to PureDarwin.
Installation
On the Mac, simply download and install the latest MacPorts DMG from the MacPorts download page. It will install the MacPorts system under /opt/local/. Instead of using binary, you can also compile tarball or svn source. See the MacPorts download page for more information about how to get more information around installing MacPorts.
Configuration
Since we would like MacPorts to create binary packages of the software that we build with it that can then be deployed to PureDarwin systems, we must enable the archive mode. For that, edit the file /opt/local/etc/macports/macports.conf so that it contains:
# Create and use binary archive packages for installation/reinstallation ease
portarchivemode yes
Since we are using .tbz2 files as thinned DarwinBuild binary roots, we’d like to create the same type of packages with MacPorts too:
# Supported types: tgz (default), tar, tbz, tbz2, tlz, xar, zip, cpgz, cpio
portarchivetype tbz2
MacPorts is now configured to create binary archives in the tbz2 format.
Important: Since Snow Leopard/Darwin 10, you need to explicitly set the architecture to i386 or you will get binaries that don’t run on 32-bit only CPUs. The PureDarwin project is about building i386 binaries, so please make sure that you have the following in your /opt/local/etc/macports/macports.conf:
# The machine architecture to build for in normal use.
build_arch i386
Otherwise, you’ll get 64-bit binaries that are incompatible with 32-bit only CPUs, such as Intel Core Solo, Core Duo and Atom CPUs.
Use
Searching for a port
sudo port search xfree86
Getting information about a port found
Remember you must match the exact port name (no sensitive case). This is usefull to know which variants are available and which wants you would like in case
sudo port info xfree86
XFree86 @4.7.0 (x11)
Variants: darwin, macosx, puredarwin
The XFree86 project's X window system implementation
Homepage: http://www.xfree86.org/
Platforms: darwin, freebsd
Maintainers: nomaintainer@macports.org
Maintainers: nomaintainer@macports.org
Building a port
To build XFree86, for example, use:
sudo port -d archive xfree86 +puredarwin
This is just an example. If you really want to build XFree86, see the XFree86 page for additional information. This should download, compile, and after a while return
—> Archive XFree86-4.7.0_0+macosx+puredarwin.i386.tbz2 packaged
The resulting package should be located at /opt/local/var/macports/packages/darwin/i386/XFree86-4.7.0_0+macosx+puredarwin.i386.tbz2 and should be ready for deployment to a PureDarwin system.
+puredarwin variant
MacPorts includes various build targets or “variants”. Here is a quick, approximate overview:
Maybe you noticed the “+puredarwin” build target in the command above. Note that “+darwin” is a superset of both “+puredarwin” and “+macosx”, so binaries made using the “+darwin” variant will in many cases not run on PureDarwin.
It is probably fair to say that the “+puredarwin” variant in MacPorts is the most appropriate variant if you are targeting the PureDarwin distribution. This build target may be defined in the portfile of the respective project that you are building.
Talking about variants, use sudo port variants XFree86 in order to list them and their respective description.
The raw content of a portfile can be displayed via sudo port cat XFree86 command.
The portfile of XFree86, /opt/local/var/macports/sources/rsync.macports.org/release/ports/x11/XFree86/Portfile, defines:
platform puredarwin {
post-patch {
set hostfd [open "${worksrcpath}/config/cf/host.def" a+]
puts $hostfd "#define DarwinQuartzSupport NO"
puts $hostfd "#define BuildGlxExt YES"
puts $hostfd "#define BuildGLXLibrary YES"
close $hostfd
}
}
Other projects might or might not need and/or have a “+puredarwin” variant. If they need but lack one, please consider submitting patches for the respective portfiles. To see which projects already have a puredarwin variant, click here.
Probably you want to set MacPorts to always use the +puredarwin variant, if possible. Do that by adding “+puredarwin” to variants.conf:
echo "+puredarwin" >> /opt/local/etc/macports/variants.conf
echo "-macosx" >> /opt/local/etc/macports/variants.conf
Purity checking
It is crucial that you check the build results for “purity”.
Updating MacPorts
Do not hesitate to “cron” it.
Also run it after your first installation of MacPorts.
sudo port selfupdate
After a “selfupdate”, you can also list outdated port(s) (in version) with:
sudo port outdated
Upgrading deprecated port(s)
In order to upgrade a specific port, use:
sudo port upgrade XFree86
If you want to upgrade all deprecated ports found since the latest selfupdate:
sudo port upgrade outdated
Cleaning MacPorts
In order to clean a specific port, use:
sudo port clean XFree86
If you want to clean all ports:
port clean all
Removing inactive port(s)
port -f uninstall inactive
Troubleshooting
Problem (1.6.0): port rpm cairo +puredarwin -macosx returns Error: Unable to execute port: invalid command name “univers…
Solution: Apply the patch below
Credits
Thanks afb for lots of help with MacPorts and for the portmain.tcl patch below.
Resources
Deploying MacPorts on PureDarwin
The recommended way to use MacPorts to produce binaries for PureDarwin is now to run MacPorts on a PureDarwin system. This page is about deploying MacPorts on a PureDarwin system (thus, making PureDarwin a bit more self-hosted). If you are interested in getting MacPorts to run on PureDarwin as quickly as possible, you can skip to the “quick method” at the end of this page. ** **
Status
MacPorts is functional on PureDarwin 9 using the “quick method” at the end of this page.
MacPorts 1.8.0 states depending its host.
----------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
** Mac OS X** **DarwinBuild** ** PureDarwin**
** build and deployement ** **YES** ** YES** ** YES**
** port fetch <port>** **YES** ** YES** ****
**port install <port>** **YES** **YES** **YES**
**/opt/local/[...]/<port>** YES YES **YES**
----------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
As an example, the fortune project (one workaround consists to fetch the source only in a puredarwin chroot where the network is available from Mac OS X or to use QEMU user mode network stack ) built and run:
Notes: On Mac OS X (the host and build environment), darwinbuild comes from macports (port install darwinbuild). And in the custom plist of darwinbuild, there is an entry for MacPorts 1.7.0, in order to install it in the BuildRoot (the guest and pseudo darwin environement) of darwinbuild. Then, in the BuildRoot, the freshly installed MacPorts project could be used to install the DarwinBuild project inside. “Infinite loop” makes sense.
To illustrate:
Getting MacPorts
Fetching MacPorts in a PureDarwin VM
Via Network
With QEMU user mode network stack, retrieve MacPorts sources via curl
Local copy
Opening the archive file in rw (.vmdk, .iso, etc..), and drop the source inside.
Building MacPorts
Compiling MacPorts in a PureDarwin vm
Do not remove headers and others needed files in `pd_setup’ stages.
External requirements (built in MacPorts):
tar xjvf /opt/local/var/macports/packages/darwin/i386/tcl-8.5.6_0+threads.i386.tbz2
It will not be missing in the future releases, but in case for `env’:
CFLAGS=-I/opt/local/include LDFLAGS=-L/usr/local/lib
In order to provide the famous Availability.h (part of Carbon which has been released (thx Apple!) as headers) needed by many projects in darwinbuild: tar xzvf /Users/aladin/PureDarwin/darwinbuild/9J61/Packages/CarbonHeaders.hdrs.tar.gz tar xzvf /Users/aladin/PureDarwin/darwinbuild/9J61/Packages/CarbonHeaders.root.tar.gz (if there is a diff)
configure
Without X11:
With X11 from MacPorts:
tar xjvf /opt/local/var/macports/packages/darwin/i386/xorg-libX11-1.1.5_1+x11_xcb.i386.tbz2
TCLSH=/opt/local/bin/tclsh ``./configure --without-objc-foundation --without-objc-runtime --with-x --x-includes=/usr/X11R6/include/ --x-libraries=/usr/X11R6/lib/ --with-tcl=/opt/local/lib --with-tclinclude=/opt/local/include --with-included-tclthread
make
make install
Compiling MacPorts 1.7.0 in DarwinBuild
A first interesting way is to use the DarwinBuild project to build (and package) MacPorts for PureDarwin.
This is a work in progress, a new entry in a custom plist is needed:
MacPorts = {
"source_sites" = (
"http://puredarwin.googlecode.com/svn/Mirror",
“http://svn.macports.org/repository/macports/downloads/MacPorts-1.7.0”,
);
version = 1.7.0;
};
**Problem: **/Volumes/Builds/9G55/BuildRoot/private/var/tmp/MacPorts/MacPorts-1.7.0.root is empty. Build verification failed.
How can we tell to darwinbuild to configure & make the project (except the way consisting of repackaging the archive with a custom makefile (makefile is autodetected by darwinbuild))?
We can continue the compilation process by hand for now..
cd /Volumes/Builds/9G55/BuildRoot
TCL is a must for MacPorts.
tar xjvf /opt/local/var/macports/packages/darwin/i386/tcl-8.5.6_0+threads.i386.tbz2
Obviously, we need curl.
tar xjvf /opt/local/var/macports/packages/darwin/i386/curl-7.19.2_0+ipv6.i386.tbz2
or
cd .. && darwinbuild -init 9G55pd1 darwinbuild curl && darwinbuild -load curl && cd BuildRoot
Why not?
Then the configure step(s)..
cd SourceCache/MacPorts/MacPorts-1.7.0
mount -t devfs devfs /dev
ln -s /opt/local/bin/tclsh /usr/bin/
./configure –without-objc-foundation –with-x –x-includes=/usr/X11R6/include/ –x-libraries=/usr/X11R6/lib/ –with-tcl=/opt/local/lib –with-tclinclude=/opt/local/include –with-included-tclthread
[...]
configure: creating ./config.status
config.status: creating Makefile
config.status: creating pkgIndex.tcl
make
[...]
===> making all in src/port
sed -e 's,@TCLSH@,/usr/bin/tclsh,g' -e 's,@TCL_PACKAGE_DIR@,/opt/local/lib/tcl8.5,g' portmirror.tcl > portmirror
sed -e 's,@TCLSH@,/usr/bin/tclsh,g' -e 's,@TCL_PACKAGE_DIR@,/opt/local/lib/tcl8.5,g' portindex.tcl > portindex
sed -e 's,@TCLSH@,/usr/bin/tclsh,g' -e 's,@TCL_PACKAGE_DIR@,/opt/local/lib/tcl8.5,g' port.tcl > port
===> making all in src/programs
make install
[...]
/usr/bin/tclsh src/dep_map_clean.tcl /opt/local/lib/tcl8.5
Congratulations, you have successfully installed the MacPorts system. To get the Portfiles and update the system, run:
sudo port -v selfupdate
Please read "man port", the MacPorts guide at http://guide.macports.org/ and Wiki at http://trac.macports.org/ for full documentation.
Stray sources might have been left in the legacy /opt/local/var/db/dports directory after this upgrade, which moved most of what it could to /opt/local/var/macports, so you might want to look in the former and cleanup manually.
o/ yeah!
port
MacPorts 1.700
Entering interactive mode... ("help" for help, "quit" to quit)
``
Version: 1.700
[MacPorts/MacPorts-1.7.0] > ^D
Goodbye
More commands soon..
port installed No ports are installed.
port selfupdate
MacPorts base version 1.700 installed Downloaded MacPorts base version 1.700
The MacPorts installation is not outdated so it was not updated
In conclusion, `port’ command should be able to run in a PureDarwin system.
cd /Volumes/Builds/9G55/ darwinbuild bzip2 && darwinbuild -load bzip2 chroot BuildRoot port install fortune
Running MacPorts
Running a compiled MacPorts on PureDarwin
The next step involves network support (but could be also done via a local repository (see MacPorts documentation for more information)), which is at this time only functional via QEMU user mode network stack and some workaround.
port selfupdate
The end of the selfupdate process should look like:
port install most
For more information, see the Using MacPorts page.
As an example with a port called `most’ which is built (+ deps) then run:
port install most
—> Fetching gperf —> Attempting to fetch gperf-3.0.4.tar.gz from http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/gperf —> Verifying checksum(s) for gperf —> Extracting gperf —> Configuring gperf —> Building gperf —> Staging gperf into destroot —> Packaging tbz2 archive for gperf 3.0.4_0 —> Installing gperf @3.0.4_0 —> Cleaning gperf —> Fetching libiconv —> Attempting to fetch libiconv-1.13.tar.gz from http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/libiconv —> Verifying checksum(s) for libiconv —> Extracting libiconv —> Applying patches to libiconv —> Configuring libiconv —> Building libiconv —> Staging libiconv into destroot —> Packaging tbz2 archive for libiconv 1.13_0 —> Installing libiconv @1.13_0 —> Cleaning libiconv —> Fetching zlib —> Attempting to fetch zlib-1.2.3.tar.bz2 from http://mesh.dl.sourceforge.net/libpng —> Verifying checksum(s) for zlib —> Extracting zlib —> Applying patches to zlib —> Configuring zlib —> Building zlib —> Staging zlib into destroot —> Packaging tbz2 archive for zlib 1.2.3_2 —> Installing zlib @1.2.3_2 —> Cleaning zlib —> Fetching libpng —> Attempting to fetch libpng-1.2.37.tar.bz2 from http://mesh.dl.sourceforge.net/libpng —> Verifying checksum(s) for libpng —> Extracting libpng —> Configuring libpng —> Building libpng —> Staging libpng into destroot —> Packaging tbz2 archive for libpng 1.2.37_0 —> Installing libpng @1.2.37_0 —> Cleaning libpng —> Fetching bzip2 —> Attempting to fetch bzip2-1.0.5.tar.gz from http://www.bzip.org/1.0.5 —> Verifying checksum(s) for bzip2 —> Extracting bzip2 —> Applying patches to bzip2 —> Configuring bzip2 —> Building bzip2 —> Staging bzip2 into destroot —> Packaging tbz2 archive for bzip2 1.0.5_2 —> Installing bzip2 @1.0.5_2 —> Cleaning bzip2 —> Fetching ncursesw —> Attempting to fetch ncurses-5.7.tar.gz from http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/ncurses —> Verifying checksum(s) for ncursesw —> Extracting ncursesw —> Configuring ncursesw —> Building ncursesw —> Staging ncursesw into destroot —> Packaging tbz2 archive for ncursesw 5.7_0 —> Installing ncursesw @5.7_0 —> Cleaning ncursesw —> Fetching ncurses —> Verifying checksum(s) for ncurses —> Extracting ncurses —> Configuring ncurses —> Building ncurses —> Staging ncurses into destroot —> Packaging tbz2 archive for ncurses 5.7_0 —> Installing ncurses @5.7_0 —> Cleaning ncurses —> Fetching readline —> Attempting to fetch readline-6.0.tar.gz from http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/readline —> Verifying checksum(s) for readline —> Extracting readline —> Applying patches to readline —> Configuring readline —> Building readline —> Staging readline into destroot —> Packaging tbz2 archive for readline 6.0.000_1 —> Installing readline @6.0.000_1 —> Cleaning readline —> Fetching pcre —> Attempting to fetch pcre-7.9.tar.bz2 from http://mesh.dl.sourceforge.net/pcre —> Verifying checksum(s) for pcre —> Extracting pcre —> Configuring pcre —> Building pcre —> Staging pcre into destroot —> Packaging tbz2 archive for pcre 7.9_0 —> Installing pcre @7.9_0 —> Cleaning pcre —> Fetching slang2 —> Attempting to fetch slang-2.1.4.tar.bz2 from ftp://ftp.plig.org/pub/slang/v2.1/ —> Attempting to fetch slang-2.1.4.tar.bz2 from http://trd.no.distfiles.macports.org/slang2 —> Attempting to fetch slang-2.1.4.tar.bz2 from ftp://ftp.ntua.gr/pub/lang/slang/slang/v2.1/ —> Verifying checksum(s) for slang2 —> Extracting slang2 —> Configuring slang2 —> Building slang2 —> Staging slang2 into destroot —> Packaging tbz2 archive for slang2 2.1.4_0 —> Installing slang2 @2.1.4_0 —> Cleaning slang2 —> Fetching most —> Attempting to fetch most-5.0.0a.tar.bz2 from http://trd.no.distfiles.macports.org/most —> Attempting to fetch most-5.0.0a.tar.bz2 from ftp://space.mit.edu/pub/davis/most/ —> Verifying checksum(s) for most —> Extracting most —> Configuring most —> Building most —> Staging most into destroot —> Packaging tbz2 archive for most 5.0.0a_1 —> Installing most @5.0.0a_1 —> Cleaning most
most
MOST version 5.0.0 (S-Lang version 2.1.4) Usage: most [-1Cbcdkstvw] [+/string] [+line number] [+s] [+d] file… […]
Troubleshooting
Compiling MacPorts in PureDarwin
There is a new CarbonHeaders-9G55 posted which adds the rest of the Availability*.h headers that were missing. Install it.
tar xzvf […]9J61/Packages/CarbonHeaders.hdrs.tar.gz
tar xzvf […]9J61/Packages/CarbonHeaders.root.tar.gz
``
can't find package Pextlib 1.0
while executing
"package require Pextlib 1.0"
(file "/opt/local/share/macports/Tcl/registry1.0/receipt_flat.tcl" line 37)
invoked from within
"source /opt/local/share/macports/Tcl/registry1.0/receipt_flat.tcl"
("package ifneeded receipt_flat 1.0" script)
invoked from within
"package require receipt_flat 1.0"
(file "/opt/local/share/macports/Tcl/registry1.0/registry.tcl" line 35)
invoked from within
"source /opt/local/share/macports/Tcl/registry1.0/registry.tcl"
("package ifneeded registry 1.0" script)
invoked from within
"package require registry 1.0"
(file "src/dep_map_clean.tcl" line 10)
Seems to be fixed since MacPorts v1.7.1 Deprecated stuff
Compiling MacPorts 1.7.1 in a PureDarwin chroot
Depending the case, the archive can come from DarwinBuild or MacPorts since most of these projects can be built into DarwinBuild and/or MacPorts.
cd /Volumes/PureDarwin
tar xzvf [...]MacPorts-1.7.1.tar.gz
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/gcc.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/gcc_42.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/gcc_os.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/gcc_select.root.tar.gz (optional?)
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/gccfast.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/Libc_headers.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/tcsh.root.tar.gz (needed?)
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/OpenSSL.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Roots/.DownloadCache/SQLite.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Packages/curl.root.tar.gz
tar xzvf /Volumes/Builds/9G55/Packages/gnumake.root.tar.gz
tar xjvf /opt/local/var/macports/packages/darwin/i386/tcl-8.5.6_0+threads.i386.tbz2
bzip2.root.tar.bz2
These steps (tar tar tar…) can be replaced by a proper `pd_roots’ (soon available) file at setup, and a minimal amount of tar:
cd /Volumes/PureDarwin
tar xzvf [...]/MacPorts-1.7.1.tar.gz
tar xjvf /opt/local/var/macports/packages/darwin/i386/tcl-8.5.6_0+threads.i386.tbz2
bzip2.root.tar.bz2
Then
chroot .
Since the tcl project (idem for X11) cannot be built right now in DarwinBuild, we’re using one built from MacPorts.
1 18023 stat:entry sh /bin/tclsh
1 18023 stat:entry sh /sbin/tclsh
1 18023 stat:entry sh /usr/bin/tclsh
1 18023 stat:entry sh /usr/sbin/tclsh
1 18023 stat:entry sh /usr/local/bin/tclsh
1 18023 stat:entry sh /usr/local/sbin/tclsh
1 18023 stat:entry sh /usr/libexec/tclsh
1 18023 stat:entry sh /System/Library/CoreServices/tclsh
Also, after a quick look in the configure' file: ac_cv_path_TCLSH=“$TCLSH” # Let the user override the test with a path.`
Exactly what we need, in fact!
Without X11:
With X11 from MacPorts:
tar xjvf /opt/local/var/macports/packages/darwin/i386/xorg-libX11-1.1.5_1+x11_xcb.i386.tbz2
TCLSH=/opt/local/bin/tclsh ``./configure --without-objc-foundation --without-objc-runtime --with-x --x-includes=/usr/X11R6/include/ --x-libraries=/usr/X11R6/lib/ --with-tcl=/opt/local/lib --with-tclinclude=/opt/local/include --with-included-tclthread
Then simply:
make make install […]
Congratulations, you have successfully installed the MacPorts system. To get the Portfiles and update the system, run:
sudo port -v selfupdate
Please read “man port”, the MacPorts guide at http://guide.macports.org/ and Wiki at http://trac.macports.org/ for full documentation.
Stray sources might have been left in the legacy /opt/local/var/db/dports directory after this upgrade, which moved most of what it could to /opt/local/var/macports, so you might want to look in the former and cleanup manually.
Deprecated (Compiling MacPorts 1.6.0 on DarwinBuild)
**** checking for Tcl configuration… configure: error: Can’t find Tcl configuration definitions
Solution: darwinbuild tcl && darwinbuild -load tcl (it fails to build at this time (carbon headers missing)) or alternatively, use some binary roots from MacPorts:
cd BuildRoot
tar xjvf /opt/local/var/macports/packages/darwin/i386/tcl-8.5.4_0+threads.i386.tbz2
chroot .
ln -s /opt/local/bin/tclsh8.5 /usr/bin/
ln -s /opt/local/bin/tclsh8.5 /usr/bin/tclsh
Be sure to precise the alternative path in case you MacPorts: ./configure –with-tcl=/opt/local/lib –with-tclinclude=/opt/local/include
Problem: configure: error: cannot find curl-config. Is libcurl installed?
Solution: darwinbuild curl && darwinbuild -load curl
Then we can run `make’ but it fails on:
gcc -pipe -DPACKAGE_NAME="thread" -DPACKAGE_TARNAME="thread" -DPACKAGE_VERSION="2.6" -DPACKAGE_STRING="thread 2.6" -DPACKAGE_BUGREPORT="" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DHAVE_PTHREAD_ATTR_SETSTACKSIZE=1 -DHAVE_READDIR_R=1 -DTCL_THREADS=1 -DTCL_WIDE_INT_TYPE=long long -DHAVE_STRUCT_STAT64=1 -DUSE_TCL_STUBS=1 -I"/opt/local/include" -I/opt/local/include -Os -Wall -Wno-implicit-int -fno-common -c echo ./generic/threadPoolCmd.c -o threadPoolCmd.o
In file included from /usr/include/sys/time.h:77,
from ./generic/threadPoolCmd.c:1707:
/usr/include/sys/_structs.h: In function 'GetTime':
/usr/include/sys/_structs.h:192: error: nested functions are disabled, use -fnested-functions to re-enable
/usr/include/sys/_structs.h:192: error: invalid storage class for function '__darwin_fd_isset'
make[2]: *** [threadPoolCmd.o] Error 1
Without tclthread seems to make a difference:
./configure --with-tcl=/opt/local/lib --with-tclinclude=/opt/local/include -without-included-tclthread
But the classic missing foundation header appears:
tclobjc.m:42:35: error: Foundation/Foundation.h: No such file or directory
So, let’s try with Foundation replacement from GNUstep compiled through MacPorts:
cd BuildRoot
tar xjvf /opt/local/var/macports/packages/darwin/i386/gnustep-base-1.14.0_0+ffi.i386.tbz2
GNUSTEP_SYSTEM_ROOT=/opt/local/GNUstep/System ./configure --with-tcl=/opt/local/lib --with-tclinclude=/opt/local/include -without-included-tclthread
It fails on:
In file included from /opt/local/GNUstep/System/Library/Headers/Foundation/NSObjCRuntime.h:33,
from /opt/local/GNUstep/System/Library/Headers/Foundation/Foundation.h:33,
from conftest.m:25:
/opt/local/GNUstep/System/Library/Headers/GNUstepBase/GSObjCRuntime.h: In function 'GSObjCClass':
/opt/local/GNUstep/System/Library/Headers/GNUstepBase/GSObjCRuntime.h:186: error: 'struct objc_object' has no member named 'class_pointer'
Quick method: Install MacPorts on PureDarwin using the binary pkg provided by the MacPorts project
On the MacPorts website, there is a pkg that contains MacPorts for the Mac. In this section, we are trying to use this pkg to install MacPorts on PureDarwin. For a PureDarwin 9 system, we need to download the MacPorts version for Leopard. Next, we need to delete the file MacPorts-1.8.2.pkg/Contents/Resources/InstallationCheck, otherwise we just get “Error - This package is meant to be installed on Mac OS X 10.5.”. Next, we can install the package into our PureDarwin system:
installer -pkg MacPorts-1.8.2.pkg -target /Volumes/PureDarwin/
Now we chroot into the PureDarwin system and try to run the “port” command:
sh-3.2# port /opt/local/bin/port: line 4: /usr/bin/tclsh: No such file or directory /opt/local/bin/port: line 4: exec: /usr/bin/tclsh: cannot execute: No such file or directory
Hence we need to symlink tclsh from /opt/local/bin:
sh-3.2# ln -s /opt/local/bin/tclsh /usr/bin/
Now the port command almost runs, but for some strange reason the con files are missing, so we need to do
cp /opt/local/etc/macports/macports.conf.default /opt/local/etc/macports/macports.conf cp /opt/local/etc/macports/sources.conf.default /opt/local/etc/macports/sources.conf cp /opt/local/etc/macports/variants.conf.default /opt/local/etc/macports/variants.conf
**Important: **Now we need to configure MacPorts as described on the MacPorts page.
At this point, the port command should be launchable and working.
Resources
http://svn.macosforge.org/repository/macports/branches/
MacPorts man port
PORT(1) BSD General Commands Manual PORT(1)
NAME
port -- operate on individual or multiple Mac ports
SYNOPSIS
port [-vdqfonRusbckixpt] [-D portdir] [-F cmdfile] [action] [actionflags]
[[portname | pseudo-portname | port-url]]
[[@version] [+/-variant ...] ... [option=value ...]]
DESCRIPTION
port is designed to operate on individual or multiple Mac ports, option-
ally within a single call, based on the requested action. If no portdir
or portname is specified, the current working directory is assumed; if no
action is specified the port command enters interactive mode, in which
commands are read via stdin. Batch commands may be passed via a cmdfile.
Port options are passed as key=value pairs and take precedence over indi-
vidual portname options as specified in its Portfile and system-wide set-
tings.
Port variants can specified as +name, which indicates the variant is
desired, or -name, indicating the contrary. In case of ambiguities, a
port can be fully specified with the @version_revision+variants format.
Installed ports can be activated or deactivated without being unin-
stalled. A port can be installed if all other version/variant(s) combina-
tions installed at any given moment are deactivated.
The port command knows various pseudo-portnames that will expand to the
specified set of ports from the available ports tree(s). These may be
used in place of a portname. Common options are:
o all: all the ports in each ports tree listed in sources.conf
o current: the port in the current working directory.
o active: set of installed and active ports.
o inactive: set of installed but inactive ports.
o installed: set of all installed ports.
o uninstalled: ports in the ports tree(s) that aren't installed.
o outdated: installed ports that are out of date with respect to
their current version/revision in the ports tree(s)
Other options, also known as pseudo-portname selectors, matching the most
common keys used in a Portfile are also accepted, in both singular and
plural form where applicable. These are:
o name
o version
o revision
o epoch
o variant
o variants
o category
o categories
o maintainer
o maintainers
o platform
o platforms
o description
o long_description
o homepage
o portdir
Search strings that will expand to a set of matching ports can be con-
structed based on the "pseudo-portname selector":regex combination used.
portnames containing valid UNIX glob patterns will also expand to the set
of matching ports. Any action passed to port will be invoked on each of
them. For example:
port list variant:no_ssl
port uninstall name:sql
port echo apache*
Logical operators "and", "or", "not", "!", "(" and ")" may be used to
combine individual portnames, port glob patterns and/or pseudo-portnames
to construct complex port expressions that expand to the set of matching
ports. For example:
port upgrade installed and apache*
port echo maintainer:jberry and uninstalled and ( category:java
and not commons* )
The port command also recognizes several command line flags and targets:
OPTIONS
-v verbose mode (generate verbose messages)
-d debug mode (generate debugging messages, implies -v)
-q quiet mode (suppress messages)
-n don't follow dependencies in upgrade (only for upgrading)
-R also upgrade dependents (only for upgrading)
-u uninstall non-active ports when upgrading and uninstalling
-f force mode (ignore state file)
-o honor state files older than Portfile
-s source-only mode (build and install from source, ignore all
binary archives, do not create/recreate binary archives) (only
applies when archive mode is enabled)
-b binary-only mode (build and install from binary archives, ignore
source, abort if no archive present; do not create/recreate
binary archives from source) (only applies when archive mode is
enabled)
-c autoclean mode (execute clean after install)
-k keep mode (don't autoclean after install)
-D specify portdir
-F Read and process the file of commands specified by the argument.
If the argument is '-', then read commands from stdin. If the
option is given multiple times, then multiple files will be
read.
-i Read commands from stdin. Short for -F -
-x In batch and interactive mode, exit on the first error encoun-
tered. Otherwise, errors during batch execution are simply
reported.
-p Despite any errors encountered, proceed to process multiple
ports and commands.
-t enable trace mode debug facilities on platforms that support it
(Mac OS X). This feature is two-folded. It consists in automati-
cally detecting and reporting undeclared dependencies based on
what files the port reads or what programs the port executes. In
verbose mode, it will also report unused dependencies for each
stage of the port installation. It also consists in forbidding
and reporting file creation and file writes outside allowed
directories (temporary directories and ${workpath}).
USER TARGETS
Targets most commonly used by regular MacPorts users are:
search
Search for an available port whose name matches a regular expression. For
example:
port search vim
info
Displays all the meta-information available for portname. Specific meta-
information may be requested through an option such as --maintainer or
--category (recognized field names are those from the PortIndex). If the
global option -q is in effect, the meta-info fields will not be labeled.
If the option --line is provided, all such data will be consolidated into
a single line per port, suitable for processing in a pipe of commands.
If the option --index is provided, the information will be pulled from
the PortIndex rather than from the Portfile (in this case variant infor-
mation, such as dependencies, will not affect the output).
For example:
port info vim +ruby
port info --category --name apache*
port -q info --category --name --version category:java
port info --line --category --name all
port info --index python24
variants
Lists the build variants available for portname.
deps
Lists the other ports that are required to build and run portname.
dependents
Lists the installed ports that depend on the port portname.
install
Install and activate portname.
uninstall
Deactivate and uninstall portname. To uninstall all installed but inac-
tive ports, use -u. For example:
port uninstall vim
port -u uninstall
activate
Activate the installed portname.
deactivate
Deactivate the installed portname.
installed
List all installed ports.
location
Print the install location of a given port.
contents
Lists the files installed by portname.
provides
Determines which port owns a given file and can take either a relative or
absolute path. For example:
port provides /opt/local/etc/irssi.conf
port provides include/tiff.h
sync
Performs a sync operation only on the ports tree of a MacPorts installa-
tion, pulling in the latest revision available of the Portfiles from the
MacPorts rsync server. To update you would normally do:
sudo port -d sync
If any of the ports tree(s) uses a file: URL that points to a local sub-
version working copy, sync will perform an svn update on the working copy
with the user set to the owner of the working copy.
outdated
List the installed ports that need upgrading.
upgrade
The upgrade target works on a port and its dependencies. If you want to
change this behaviour, look at the switches for n (no dependencies) and R
(dependents) below.
Upgrade the installed portname. For example:
port upgrade vim
To upgrade all installed ports:
port upgrade installed
To upgrade portname and the ports that depend on it:
port -R upgrade libiconv
To force an upgrade (rebuild) use:
port -f upgrade vim
To upgrade portname without following its dependencies, use -n. For
example:
port -n upgrade ethereal
clean
Clean the files used for building portname. To just remove the work
files, use the --work actionflag. To remove the distribution files (tar-
balls, etc), specify --dist. To remove the archive(s) for the current
version of a port, pass --archive. To remove the work files, distribu-
tion files and archives, pass --all. For example:
port clean --dist vim
port clean --archive vim
To remove only certain version(s) of a port's archives ( version is any
valid UNIX glob pattern), you can use:
port clean --archive vim 6.2.114
or:
port clean --archive vim '6.*'
echo
Writes to stdout the arguments passed to port. This follows the expan-
sion of pseudo-portnames, portname glob patterns, pseudo-portname
selectors and the evaluation of port expressions. echo may be used to
determine the exact set of ports to which a given string of arguments
will expand, without performing any further operations on them. For exam-
ple:
port echo category:net
port echo maintainer:jmpp and name:netw
port echo maintainer:jmpp and ( net* or category:text )
list
If no argument is given, display a list of the the latest version of all
available ports. If portname(s) are given as arguments, display a list
of the latest version of each port.
version
Display the release number of the installed MacPorts infrastructure.
selfupdate
Updates the MacPorts system, ports tree(s) and base tools if needed, from
the MacPorts rsync server, installing the newest infrastructure avail-
able. To update you would typically do:
sudo port -d selfupdate
See sync for more information about updating ports tree(s).
help
Displays a summary of all available actions and port command syntax on
stdout.
DEVELOPER TARGETS
The targets that are often used by Port developers are intended to pro-
vide access to the different phases of a Port's build process:
dir
Displays the path to the directory containing portname.
file
Displays the path to the Portfile for portname.
cat
Concatenates and prints the contents of Portfile on stdout.
edit
Opens Portfile with your default editor specified in your shell's envi-
ronment variable. Alias ed also invokes this command.
unarchive
Unpack the port from a pre-built binary archive. When archive mode is
enabled, this command is called automatically, prior to fetch, to check
for an existing binary archive to unpack. If found, it is unpacked and
all stages up to install are then skipped.
fetch
Fetches the distribution files required to build portname.
checksum
Compute the checksums of the distribution files for portname, and compare
them to the checksums listed in Portfile.
extract
Extracts the distribution files for portname.
patch
Applies any required patches to portname's extracted distribution files.
configure
Runs any configure process for portname.
build
Build portname.
destroot
Installs portname to a temporary directory.
test
Tests portname.
lint
Verifies Portfile for portname.
archive
Archive the port for a later unarchive. When archive mode is enabled,
binary archives will be created automatically whenever an install is per-
formed, or when the archive target is called explicitly.
distcheck
Check if the distfiles haven't changed and can be fetched.
livecheck
Check if the software hasn't been updated since the Portfile was last
modified.
PACKAGING TARGETS
There are also targets for producing installable packages of ports:
pkg
Creates an OS X installer package of portname.
mpkg
Creates an OS X installer metapackage of portname and its dependencies.
dmg
Creates an internet-enabled disk image containing an OS X package of
portname.
mdmg
Creates an internet-enabled disk image containing an OS X metapackage of
portname and its dependencies.
rpm
Creates an RPM binary package of portname, similar to a tgz "archive".
srpm
Creates a SRPM source package of portname, similar to a xar "portpkg".
dpkg
Creates a DEB binary package of portname.
EXAMPLES
The following demonstrates invoking port with the extract target on
portdir "textproc/figlet" and extract.suffix set to ".tgz":
port extract -D textproc/figlet extract.suffix=.tgz
FILES
${prefix}/etc/macports/macports.conf
Global configuration file for the MacPorts system.
${prefix}/etc/macports/sources.conf
Global listing of the ports trees used by MacPorts. This file also
enables rsync synchronization.
${prefix}/etc/macports/variants.conf
Global variants used when a port is installed.
~/.macports/macports.conf
User configuration file for the MacPorts system. It overrides the
global macports.conf file.
DIAGNOSTICS
The port utility exits 0 on success, and >0 if an error occurs.
SEE ALSO
macports.conf(5), portfile(7), portgroup(7), portstyle(7), porthier(7)
AUTHORS
Landon Fuller
James Berry
Jordan K. Hubbard
Juan Manuel Palacios
Kevin Van Vechten
Ole Guldberg Jensen
Robert Shaw
Chris Ridd
Matt Anton
Joe Auty
BSD April 29, 2007 BSD
MacPorts Troubleshooting
This page contains some of the issues you might run into when using MacPorts on a PureDarwin system (or in a PureDarwin chroot). We also list pragmatic workarounds where possible. This page is mainly for reference via search engines, so we should always cite specific error messages here.
gcc42
Issue
No suitable m4 Workaround ln -s gm4 m4 Issue In file included from ../../gcc-4.2.4/gcc/tsystem.h:104, from ../../gcc-4.2.4/gcc/config/darwin-crt3.c:38: /usr/include/stdlib.h:283: error: expected ‘,’ or ‘;’ before ’__OSX_AVAILABLE_BUT_DEPRECATED
Workaround
gtk2
Issue
“needs” Xcode
Workaround
port edit gtk2, delete the whole section regarding Xcode
Issue
configure: error: no acceptable Java compiler found in $PATH
Workaround
Need to port edit db46, delete the line about java, port install db46
Now we can continue to build the rest of gtk2
python26
Issue
In file included from Python/mactoolboxglue.c:27:
Include/pymactoolbox.h:10:27: error: Carbon/Carbon.h: No such file or directory
Include/pymactoolbox.h:13:33: error: QuickTime/QuickTime.h: No such file or directory
Workaround
Use patch provided by afb in MacPorts ticket #23122
Then you need to to the following so that subsequently installed Python modules are correctly found:
mkdir -p /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib
ln -s /opt/local//include/python2.6 /opt/local/Library/Frameworks/Python.framework/Versions/2.6/Headers
mkdir -p /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/
ln -s /opt/local/bin/python2.6 /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/
ln -s /opt/local/lib/python2.6/site-packages /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/
tiff
**
**
Issue
tiff “needs” Xcode
Workaround
port edit tiff, delete the line regarding Xcode
The following might also be necessary:
ln -s /usr/bin/true /usr/bin/defaults
dnsmasq
Issue make: yacc: Command not found Workaround Need to port install byacc ln -s /opt/local/bin/byacc /opt/local/bin/yacc But then, the dependency nawk fails to build due to missing dsymutil, hence we need to do: ln -s /usr/bin/true /usr/bin/dsymutil
subversion
Issue
subversion wants to use Keychain, which is not available in PureDarwin
~~
~~
Workaround
port install subversion +disable_keychain
~~
~~
~~Suggested puredarwin variant, see MacPorts ~~#23304
dbus
Issue fails with “configure: error: launchd support explicitly enabled but not available” Workaround Install launch.h from the launchd binary root
xorg-libxcb
Issue ImportError: No module named xcbgen.state Workaround Solved in python symlinking of site-packages above (see python26)
mesa
Issue
directory
Workaround
We should write a puredarwin variant
xinit
Issue
DEBUG: Assembled command: ‘cd “/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_x11_xinit/work/xinit-1.2.0” && /usr/bin/make -j2 all’ /usr/bin/make all-recursive Making all in privileged_startx /usr/bin/make all-am CC server.o CC client.o server.c:35:31: error: servers/bootstrap.h: No such file or directory
Workaround Install headers from launchd.root.tar.gz
xorg-server
Issue IOKit portion (needed for Darwin) is missing
Workaround
glitz
Issue
Workaround
port edit glitz, delete all lines regarding Xcode
db47
Issue checking if jikes works… configure: error: The Java compiler jikes failed
Workaround Edit the portfile so that it includes
variant puredarwin { configure.args-delete –enable-java }
curlftpfs
Issue Can’t be built since MacFUSE doesn’t build on PureDarwin due to being an Xcode project
Workaround Install MacFUSE from project’s pkg, edit portfile to remove dependency on MacFUSE
To be continued
Patching MacPorts to produce binaries for PureDarwin
MacPorts, formerly known as DarwinPorts, is a variant of the BSD ports system for Darwin and Mac OS X.
Since the focus of the MacPorts project has shifted away from Darwin toward Mac OS X lately, it may be necessary create some patches in order to be able to use MacPorts-built software on PureDarwin.
You can check here which ports already have (or should have) puredarwin variants. This page describes how to create such patches.
Making a +puredarwin variant
Some software in MacPorts compiles in a way that makes the binaries depend on proprietary, closed-source libraries and frameworks, such as Carbon.framework, CoreServices.framework, and others. Strangely, this sometimes is even the case for open source software that originally comes from other operating systems where these frameworks and libraries don’t even exist, such as FreeBSD.
Since the proprietary, closed-source libraries and frameworks are not part of Darwin, it is necessary to patch the portfiles for such projects, as will be shown on this page.
Case study: vim
Problem statement
Note that the following is example somewhat theoretical since a +puredarwin variant has been committed to the vim portfile after this article was written.
If as usual, you compile vim in MacPorts, the resulting binary will look like this:
otool -L /opt/local/bin/vim
/opt/local/bin/vim:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)
/opt/local/lib/libncurses.5.dylib (compatibility version 5.0.0, current version 5.0.0)
/opt/local/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 136.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 32.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.15.0)
The dependencies marked red are not part of Darwin and should not really be necessary for vim. So we need to change the portfile in a way that MacPorts can compile vim without these dependencies. It has been said, “in a way”, implicitly meaning that there are many ways depending the case.
Finding out how to disable the proprietary libraries and frameworks
Execute these commands:
port info vim # look at the description, variants and dependencies
port cat vim # look at the portfile raw content
port extract vim # extract the original source
port patch vim # appply MacPorts patches
cd $(port work vim) # go to working directory
Let’s search the configure files there for mentions of Carbon (which is the first of the proprietary frameworks in the otool output above):
grep -r Carbon . | grep configure
There we have it, lots of Carbon mentions.
In the same way, you can grep config.log if it exists.
In vim72/src/auto/configure, we see: enable_carbon_check In order to find what should be disable, we’re looking configuration options manually (old dead-listing method, line by line).
./configure --help
This option seems interesting:
[...]
--disable-darwin Disable Darwin (Mac OS X) support.
[...]
Now, before editing the portfile, we first compile manually to see if the next result of otool will be clean, or not. You can also add more options, reflecting variants you will use too.
./configure --prefix=/opt/local --disable-darwin ...
Then…
make
The result is clean:
./src/vim:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)
/opt/local/lib/libncurses.5.dylib (compatibility version 5.0.0, current version 5.0.0)
/opt/local/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
Editing the portfile
Now we can edit the portfile and add +puredarwin platform (a variant alias) with relevant options. First, copy the portfile:
cp $(port file vim) $(port file vim).orig
Second, remember to backup your alternate portfile, cause a port selfupdate will make you lose your modifications.
port edit vim
Then just above the first variant declaration, add:
platform puredarwin {
configure.args-append --disable-darwin
}
This case is really simple, it just needs a missing option. Sometimes you will have to use configure.args-delete in order to also remove options.
The modifications are automatically reflected in description:
port info vim
``
The modifications are also reflected in the final binary:
port install vim **-macosx **+**puredarwin** +tiny
Portfile changed since last build; discarding previous state.
---> Fetching vim
[...]
---> Cleaning vim
Note: You have probably noticed that -macosx has been added, it’s because of MacPorts nature which autodetects the host and adds corresponding platform/variant implicitly. Since we tend to avoid link to proprietary frameworks and other problematic dependencies.
Testing the modifications
Paranoid behavior makes we look again to the installed vim, it’s a success.
otool -L /opt/local/bin/vim
/opt/local/bin/vim:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)
/opt/local/lib/libncurses.5.dylib (compatibility version 5.0.0, current version 5.0.0)
/opt/local/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
The goal has been reached.
Creating and submitting a patch to MacPorts
Create a patch to be submitted to MacPorts:
export P=vim ; diff -u $(port file $P).orig $(port file $P) > Portfile-$P.diff
Check at
https://trac.macports.org/query?status=assigned&status=closed&status=new&status=reopened&order=priority&col=id&col=summary&col=status&col=type&col=priority&col=milestone&col=component&port=vim
whether a ticket for that port already exists that matches the topic of your patch. If not, create a new ticket at https://trac.macports.org/newticket - suggested values (copy and paste, but replace “packagename” and “version” with the real values): Short Summary: packagename-version puredarwin variant Full Description: Patch to include a +puredarwin variant so that the resulting binary can run on [http://www.puredarwin.org/ PureDarwin], where proprietary frameworks and libraries are not available Type: enhancement Milestone: Port Enhancements **Version: **(leave as is)
- Cc: probono(puredarwin.org), aladin(puredarwin.org) (do not cc yourself) Priority: Normal Component: ports Keywords: packagename, puredarwin, haspatch Port: packagename
Case study: freetype
cp $(port file freetype) $(port file freetype).orig
port edit freetype
platform puredarwin {
configure.args-delete --with-old-mac-fonts
configure.args-append --without-ats
}
port info freetype
port clean –all freetype
port -f destroot freetype +puredarwin
port rpm freetype +puredarwin
sh-3.2# port deactivate freetype —> Deactivating freetype sh-3.2# port activate freetype @2.3.7_1+puredarwin —> Activating freetype 2.3.7_1+puredarwin sh-3.2# port installed freetype The following ports are currently installed: freetype @2.3.7_1 freetype @2.3.7_1+puredarwin (active)
diff -u $(port file freetype).orig $(port file freetype) > Portfile-freetype.diff ### Case study: glib2 {style="background-color:transparent;color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:18px;margin-top:10px;margin-bottom:10px;margin-left:10px;margin-right:0px"} This case is a bit more complicated, since we need to patch configure.in if the +puredarwin variant is selected.cd $(port work glib2)/glib-*/
cp configure.in configure.in.orig
nano configure.in
# delete Carbon-related portions
diff -u configure.in.orig configure.in > $(port dir glib2)/files/patch-configure.in.diff
cd -
cp $(port file glib2) $(port file glib2).orig
port edit glib2
add
platform puredarwin {
patchfiles-append patch-configure.in.diff
}
diff -u $(port file glib2).orig $(port file glib2) > Portfile-glib2.diff
Note: Carbon has been explicitly added in 2007 to configure.in file as we can read in the Changelog file.
* configure.in: Add Carbon checks.
Another way is to directly edit configure file. At lines 4290 and 4291, comment or remove the problematic header includes:
#include <Carbon/Carbon.h>
#include <CoreServices/CoreServices.h>
From line 4722 to 4729, you can comment all the block, or alternatively define HAVE_CARBON to 0 and remove -framework Carbon.
if test "x$glib_have_carbon" = "xyes"; then
cat >>confdefs.h <<_ACEOF
#define HAVE_CARBON 1
_ACEOF
LDFLAGS="$LDFLAGS -framework Carbon"
fi
Note: It hasn’t been tested and doesn’t appear to be needed for “purity” purpose (since it’s worked with instructions just above), but other occurrences has been found: Line 4311:
glib_have_carbon=yes
From line 4356:
if test "$glib_have_carbon" = "yes"; then
OS_CARBON_TRUE=
OS_CARBON_FALSE='#'
else
OS_CARBON_TRUE='#'
OS_CARBON_FALSE=
fi
To do
Expand the otool check so that it can be included in MacPorts as a “purity tester” (i.e., check that anything that comes out of MacPorts is free from links to proprietary, closed-source libraries and frameworks).
References
Purity checking
This page is about checking the “purity” (read: absence of links to ApplicationServices, CoreServices and other proprietary, closed-source frameworks and libraries).
About “purity”
Since the proprietary, closed-source frameworks and libraries that are part of Mac OS X but not Darwin, we must ensure that none of the binaries generated through the MacPorts project link to any of them.
What additionally complicates the matter is that links are “inherited” in the Darwin linker system. Say, liba links to ApplicationServices by mistake, libb links to liba, and libc links to libb. In this case, even libc now has the “wrong” link to ApplicationServices, even though libc itself wouldn’t need it.
Typically ApplicationServices will not show up in Makefile.in, but configure will put it into the autogenerated Makefile in these cases.
So it is really crucial to check that no unneccessary links are introduced into the system, as they propagate all the way up through the stack.
Script
The script at the bottom of this page will help you checking the “purity” of a given RPM package Also, take a look at Visualize dependencies in MacPorts page if you want to check (and have an overview) of the “purity” of all dependencies (installed ports) for a given portname. Alternatively, you can use something like this to see impurities as they happen during the build process:sh-3.2# port clean cairo —> Cleaning cairo sh-3.2# port -v -d build cairo +puredarwin 2>&1 | grep Services checking ApplicationServices/ApplicationServices.h usability… yes checking ApplicationServices/ApplicationServices.h presence… yes checking for ApplicationServices/ApplicationServices.h… yesAnother check is grep -R Services /opt/local/lib/pkgconfig/otool -L /opt/local/lib/*.dylib | grep ServicesWhich should not return anything like ApplicationServices and the like.
Blacklist
The following are proprietary, closed-source frameworks and libraries that we must not link to if we want to deploy some binary packages generated through MacPorts to PureDarwin.
- AppKit
- ApplicationServices
- Carbon
- Cocoa
- CoreFoundation (if CF-Lite is insufficient, which needs to be tested manually)
- CoreServices
- Symbolication
- …
Results
Some results of the example shown above
- Terminal links to ApplicationServices
- Thunar links to ApplicationServices and CoreServices
- Xft2 links to ApplicationServices
- cairo links to ApplicationServices and CoreServices
- exo links to ApplicationServices
- fontconfig links to ApplicationServices
- glib2 links to Carbon
- gettext links to CoreFoundation
- libglade2 links to ApplicationServices
- libxfcegui4 links to ApplicationServices and CoreServices
- mousepad links to ApplicationServices
- orage links to ApplicationServices
- pango links to AppKit, ApplicationServices, Carbon, Cocoa, CoreFoundation, Foundation
- popt links to CoreFoundation
- python25 links to AppKit, ApplicationServices, Carbon, CoreFoundation, CoreServices, Foundation, QuickTime
- xfdesktop links to ApplicationServices, CoreServices
- xfprint links to ApplicationServices, CoreFoundation, CoreServices
- xfwm4 links to ApplicationServices, CoreServices
Congratulations, you have found an easter egg: German law mandates that only certain ingredients can go into beer. Similarly, PureDarwin purity law mandates that only open source frameworks and libraries may be used.
The Reinheitsgebot is the German law that regulates wich ingredients can go into beer: water, barley, hops and malt. (Only recently has it been updated by the Provisional German Beer law, which also allows wheat an cane sugar). For more information on the Reinheitsgebot, see Wikipedia: German purity law.
Upgrading a port
MacPorts, formerly known as DarwinPorts, is a variant of the BSD ports system for Darwin and Mac OS X. This page describes how to upgrade a port in MacPorts to a later version of the respective software.
Case example
In this example, we update the portfile for gnustep-base. This is just an example.
Downloading latest upstream source
To find out the URL where the upstream source is located, do:
port cat gnustep-base
Check whether a newer version is available at that download location and download it, in this case gnustep-base-1.16.3.tar.gz
Calculating md5
Calculate the md5 checksum of the upstream source with
md5 gnustep-base-1.16.3.tar.gz
MD5 (gnustep-base-1.16.3.tar.gz) = 32ae302922a0a6e14c7008a105014bba
Editing the portfile
Copy the portfile first so that we can create a patch later:
cp $(port file gnustep-base) $(port file gnustep-base).orig
port edit gnustep-base
Change version to 1.16.3 Change md5 to the value calculated before
Creating the patch
diff -u $(port file gnustep-base).orig $(port file gnustep-base) > gnustep-base.patch
Testing the patched portfile
Now build it with
port rpm gnustep-base
Activating the new version
In order to activate the new version so that it is used when builting additional software, you need to do in addition:
port archive gnustep-base
port upgrade -n gnustep-base
Finally, check that your activated version is really the new one with
port installed gnustep-base
Submitting the patch to MacPorts
Search whether a ticket already exists, if not submit a new one with the patch attached.
Visualize dependencies in MacPorts
This page describes a way to track dependencies and related satellite information (e.g: as variants or blockers) in MacPorts.
Overview of dependencies, variants and blockers
Graphviz is an opensource graph visualization software from AT&T Laboratories and Bell Laboratories (Lucent Technologies).
Installing Graphviz
Not so common to beginning (instead of ending) with a “snake eating his tail”, we will use graphviz from MacPorts to track dependencies and other information.
port install graphviz +the_variants_you_need
or grab and compile the source from graphviz.org.
Note: On Mac OS X, Pixelglow is a nice a front-end, you can even see the graph being built in real-time.
Using pd_portviz to generate a graph
The pd_portviz tool is available in the svn or hg trunk location.
Preliminary
A rudimentary legend is generated in the DOT language:
Three kinds of dependencies can be found in MacPorts:
- Build dependencies
- Library dependencies
- Runtime dependencies Sometimes there isn’t any dependency, or the port is not installed (“Not here” in the legend), so we cannot scrutinize the content since there is no content. When a port is already installed, the content is examined in order to find and count “current blocker”. Also, notice any variant explicitly given will be detected (if available) and highlighted on any dependencies.
An example across rrdtool dependencies
An example of hierarchical overview of rrdtool dependencies, where glib2 (18 problematic objects) is identified as “impure”:
Here the current script output:
./pd_portviz.sh rrdtool +puredarwin
Generate dependencies graphs of rrdtool +puredarwin
Legend:
1 + foo (variant_x1, …, variant_xn)
2 |`. bar (variant_y1, …, variant_yn) No dependency found
2 |`+ baz impure**!** /Blocker_1 -> file_involved_1 Impurity detected
2 |`+ baz impure**!** /Blocker_. -> file_involved_. Impurity detected
2 |`+ baz impure! /Blocker_n -> file_involved_n Impurity detected
2 |`+ baz (variant_z1, …, variant_zn) Has Dependenc{y|ies}
3 | |`- dependency_bar () Already processed
Now generating dependencies tree and checking for ``purity’’, please wait…
1 + rrdtool (universal python)
2 |`. XFree86 (darwin puredarwin macosx)
2 |`+ xrender (universal)
3 | |`- XFree86 ()
3 | |`+ render ()
4 | | |`. pkgconfig (universal darwin_6)
2 |`. expat (universal no_static examples)
2 |`+ fontconfig (universal doc vera macosx)
3 | |`+ libiconv (universal darwin_7 darwin_8 freebsd linux disable_utf8mac disable_extra_encodings enable_cp932fix)
4 | | |`. gperf (universal)
3 | |`- expat ()
3 | |`+ freetype (universal bytecode doc)
4 | | |`. zlib (universal examples)
2 |`- freetype ()
2 |`+ glib2 (universal puredarwin darwin powerpc darwin_6 darwin_9)
3 | |`- pkgconfig ()
3 | |`+ gettext (universal darwin_6)
4 | | |`- libiconv ()
4 | | |`+ ncurses (universal freebsd)
5 | | | |`. ncursesw (universal)
4 | | |`- expat ()
3 | |`- libiconv ()
3 | |`. perl5.8 (darwin threads shared darwin_8 darwin_9)
2 |`- libiconv ()
2 |`- gettext ()
2 |`+ pango (universal no_x11)
3 | |`- pkgconfig ()
3 | |`- glib2 ()
3 | |`- XFree86 ()
3 | |`+ Xft2 (universal)
4 | | |`- pkgconfig ()
4 | | |`+ xorg-xproto ()
5 | | | |`+ xorg-util-macros ()
6 | | | | |`- pkgconfig ()
4 | | |`- zlib ()
4 | | |`- xrender ()
4 | | |`- freetype ()
4 | | |`- fontconfig ()
4 | | |`- expat ()
3 | |`+ cairo (universal glitz no_x11 macosx)
4 | | |`- pkgconfig ()
4 | | |`. libpixman (universal)
4 | | |`- xrender ()
4 | | |`- fontconfig ()
4 | | |`- freetype ()
4 | | |`+ libpng (universal)
5 | | | |`- zlib ()
4 | | |`- render ()
4 | | |`- zlib ()
4 | | |`- expat ()
3 | |`- fontconfig ()
2 |`- cairo ()
2 |`- perl5.8 ()
2 |`. tcl (universal threads memdebug)
2 |`- zlib ()
2 |`- libpng ()
2 |`+ libxml2 (universal debug)
3 | |`- libiconv ()
3 | |`- zlib ()
Generation of rrdtool.dot complete.
Now drawing graphs from rrdtool.dot, please wait…
Generation of rrdtool_directed.png complete.
Generation of rrdtool_circular.png complete.
Generation of rrdtool_radial.png complete.
Generation of rrdtool_undirected.png complete.
Generation of rrdtool_undirectedBIS.png complete.
The dot file, then five PNG graphs are generated.
- rrdtool.dot
- rrdtool_directed.png
- rrdtool_circular.png
- rrdtool_radial.png
- rrdtool_undirected.png
- rrdtool_undirectedBIS.png
The directed (hierarchical) view:
The circular view:
The radial view:
The first undirected view:
The second undirected view:
Purity?
Here an example of impurities detected in a port:
[...]
1 + graphviz **impure!** /ApplicationServices.framework -> /Applications/MacPorts/Graphviz.app/Contents/Frameworks/graphviz.framework/graphviz
1 + graphviz **impure!** /ApplicationServices.framework -> /Applications/MacPorts/Graphviz.app/Contents/Frameworks/graphviz.framework/Versions/A/graphviz
1 + graphviz **impure!** /Cocoa.framework -> /Applications/MacPorts/Graphviz.app/Contents/MacOS/Graphviz
1 + graphviz (universal darwin_6 darwin_7 darwin_8 darwin_9 guile lua ocaml perl php python ruby tcl smyrna no_pangocairo no_x11 gui)
[...]
And the corresponding result:
Also, see the purity checking page.
Miscellaneous
Illustration of irony?
Why is it hard to compile a “pure” kde3?
Why is it also hard to compile a “pure” gnome?
Ressources
VirtualBox archive
as of 2011 January: Virtualbox runs with PureDarwin nano **please see: **http://www.puredarwin.org/developers/virtualbox ** ** ** ** the following info is kept here for historical reasons! ** ** ** **
(Pure)Darwin 9 guest OS not supported or it doesn’t seem to be trivial to make it works. No problem concerning loading the bootloader. Latest versions tested:
- VirtualBox 3.0.2 on Mac OS X
- VirtualBox 3.0.6 on Windows XP 32 bits
** ** Problem: black screen at kernel loading (just after kexts decompression), framebuffer unsupported? Settings
VirtualBox random settings
Set up “OS Type” variable as a “FreeBSD” machine. VT-x/AMD-v is a must. (ACPI must be disabled) PAE/NX seems to be needed^1^ and enabled^2^ (please add more text)
Physical Address Extension (PAE)
“Physical addresses greater than 32 bits are supported: extended page table entry formats, an extra level in the page translation tables is defined, 2-MByte pages are supported instead of 4 Mbyte pages if PAE bit is 1. The actual number of address bits beyond 32 is not defined, and is implementation specific.” said Intel MacCPUID.app. Boot
Boot arguments
-v is not needed since it is enabled by default. (please add more text)
dfe bootloader
Note: Pressing ? + *Enter *doesn’t give any output.
?video flag
?video works in booter and returns:
Note: Passing kernel flag “Graphics Mode”=“<value>” also seems to work.
?memory flag
A bit obscure… Please let us know if you know about.
SMBIOS table not found
Then it fails, attempting to find SMBIOS table.
After using booter boot-132_dfe_r146 (instead of dfe_r28 version) from David Elliott, another problematic error is raised about determination of CPU:FSB multiplier (0 is found…).
Pressing ‘y’ leads irremediably to a (resized) blank screen, full cpu load, and a critical error forcing to poweroff the vm. See corresponding VirtualBox log of pressing ‘y’:
00:00:03.572 Display::handleDisplayResize(): uScreenId = 0, pvVRAM=184d9000 w=640 h=480 bpp=32 cbLine=0xA00 00:00:05.906 Guest Log: Key pressed: 0086 00:00:05.942 Display::handleDisplayResize(): uScreenId = 0, pvVRAM=00000000 w=720 h=400 bpp=0 cbLine=0x0
00:00:09.600 Guest Log: Key pressed: 002E
Please, let us know if you have a solution.
Chameleon bootloader and Voodoo kernel
Other attempts have been made, combining xnu-dev kernel (Voodoo BETA 2b ) and chameleon bootloader (v1.0.11). We can bypass the error above about CPU:FSB multiplier with the boot argument busratio=…
With ACPI enabled in VirtualBox, the vm hangs at “Local APIC version not 0x14 as expected”:
Without ACPI, it complains about and irremediably lead to a kernel panic.
Troubleshooting
Problem: “Unable to find SMBIOS table” Solution 0: So, need another BIOS (with correct offset)?
Another solution would be to use the host SMBIOS table, or a copy of it. See http://www.virtualbox.org/ticket/1751 for more information. Solution 1: It’s still remain possible to modify and recompile the VirtualBox sources in order to give a correct SMBIOS. See VirtualBox/src/VBox/Devices/PC/DevPcBios.cpp
Solution 2: use another kernel (xnu-dev) and/or another bootloader (chameleon)
Machine Specific Registers (MSR)About MSR?
“The processor provides a variety of machine specific registers (accessed via the RDMSR and WRMSR instructions) that are used to control and report on processor performance. Virtually all MSRs handle system related functions and are not accessible to an application program. One exception to this rule is the time-stamp counter.” said Intel MacCPUID.app.
CPU:FSB multiplier
According to Wikipedia: “The clock multiplier (or CPU multiplier or bus/core ratio) is the ratio of the internal CPU clock rate to the frequency of its external address/data bus, today often termed front side bus(FSB). A system with a CPU multiplier of 10x will have its CPU execute 10 complete cycles for every cycle of its FSB. For example, a system with an FSB running at 133 MHz and a clock multiplier of 10x, the CPU will run at 1.33 GHz.”
CPU model seems OK:
00:00:02.889 Full Name: Intel(R) Core(TM)2 CPU T7400 @ 2.16GHz
T7400 specs example
- FSB: 667 Mhz
- Multiplier: 13x
Auto resize and blank screen
The highlighted line could explain why suddenly the screen is auto resized, and consequently why the screen goes blank. **
00:00:09.666 Guest Log: BIOS: Booting from CD-ROM...
**
00:00:58.579 Display::handleDisplayResize(): uScreenId = 0, pvVRAM=184d9000 w=1024 h=768 bpp=32 cbLine=0x1000
00:00:58.608 VERR_REM_TOO_MANY_TRAPS -> uTrap=d error=6a next_eip=ffe01890 eip=ffe01890 cr2=ffe01890
00:00:58.608 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00:00:58.608 !!
00:00:58.608 !! Guru Meditation -2304 (VERR_REM_TOO_MANY_TRAPS)
00:00:58.608 !!
00:00:58.608 !!
00:00:58.608 !! {mappings, <NULL>}
00:00:58.608 !!
00:00:58.608
Footnotes
^1^Why PAE/NX seems to be needed?
^2^How to enable PAE/NX?
Via command-line, assuming PureDarwin is the name of your vm:
``Via gui, a simple checkbox in the settings.
Ressources
http://alex.csgraf.de/self/?part/projects&folder/Qemu%20OSX&type/&project/projects¶meters/id=Qemu%20OSX/qemu http://www.virtualbox.org/ticket/1071 http://www.virtualbox.org/ticket/1751 (Allow SMBIOS information to be copied from host) http://softwarecommunity.intel.com/articles/eng/1107.htm (MacCPUID.app)
http://code.google.com/p/xnu-dev / (A fork of the XNU kernel)
VirtualBox
Status
2011 Jan 14 news:
-
PureDarwin Nano + Xmas run in
- VirtualBox 4 on ubuntu
-
PureDarwin Nano runs with
- VirtualBox 4 on Windows
- VirtualBox 3.2 on Snow Leopard
older news:
- PureDarwin Nano runs in VirtualBox 3
- on Mac OS X
- on Windows XP 32 bits
PureDarwin Nano
VirtualBox 4 is able to run PureDarwin Nano
- on Linux
- details of the linux test system:
- host: ubuntu 10.10 2.6.35-24-generic #42-Ubuntu SMP Thu Dec 2 02:41:37 UTC 2010 x86_64 GNU/Linux
- VirtualBox 4.0.0 r69151
- PureDarwin Nano: with PureDarwin.local 9.5.0 Darwin Kernel Version 9.5.0: Sat Dec 6 19:39:54 IST 2008; Voodoo; Release 1.0 :xnu-1228.7.58/BUILD/obj/RELEASE_I386 i386
- please use following settings in VirtualBox
- Systems > Motherboard
- Chipset ICH9
- enable IO APIC
- enable EFI
- Systems > Processor: enable PAE/NX
- Systems > Acceleration
- enable VT-x/AMD-V
- enable nested paging
- Systems > Motherboard
- details of the linux test system:
- on Windows
- VirtualBox 4.0.0 under Windows 7 x86-64, when using the “Red Hat Linux”, VT-X, Nested paging and IO APIC
VirtualBox 3
- MacOS
- VirtualBox 3.0.2 on Mac OS X
- VirtualBox 3.2.12 r68302 on Snow Leopard 10.6.6, x86_64 kernel
- Windows
- VirtualBox 3.0.6 on Windows XP 32 bits
PureDarwin Xmas
VirtualBox 4 is able to run PureDarwin Xmas
- on Linux
- details of the linux test system:
- host: ubuntu 10.10 2.6.35-24-generic #42-Ubuntu SMP Thu Dec 2 02:41:37 UTC 2010 x86_64 GNU/Linux
- VirtualBox 4.0.0 r69151
- PureDarwin Nano: with PureDarwin.local 9.5.0 Darwin Kernel Version 9.5.0: Sat Dec 6 19:39:54 IST 2008; Voodoo; Release 1.0 :xnu-1228.7.58/BUILD/obj/RELEASE_I386 i386
- please use following settings in VirtualBox
- Systems > Motherboard
- Chipset ICH9
- enable IO APIC
- Systems > Processor: enable PAE/NX
- Systems > Acceleration
- enable VT-x/AMD-V
- enable nested paging
- Systems > Motherboard
- add PureDarwin Nano as CDrom + select after F8 the Xmas HD and start with Graphics mode = 1024x768x16
- details of the linux test system:
Screenshots of PureDarwin Xmas
Ubuntu + VirtualBox 4
Screenshots of PureDarwin nano
Ubuntu + VirtualBox 4
Using boot.efi in VirtualBox
EFI emulation in VirtualBox 4 is capable of loading and executing boot.efi as the bootloader. Hence boot-132 or its derivatives are no longer needed in VirtualBox. We were able to boot PureDarwinNano.iso this way.
The code responsible for loading boot.efi can be seen here. Apparently VirtualBox includes an EFI implementation based on TianoCore EDK2, with special patches to boot Mac OS X Server (and hence, Darwin).
Screenshots of VirtualBox 4 settings
PureDarwin: Ubuntu + VirtualBox 4
PureDarwin: Windows + VirtualBox 4
See also
- “VirtualBox 3.2 supports Mac OS X guests out-of-the-box”
- http://www.puredarwin.org/virtualbox-archive
Visualize mach-o dependencies
In the spirit of Vizualize dependencies in MacPorts and Vizualize KEXTs dependencies, this page describes a way to track mach-o file dependencies and related satellite information (e.g: blockers).
Prerequisites
Graphviz is an opensource graph visualization software from AT&T Laboratories and Bell Laboratories (Lucent Technologies).
port install graphviz +the_variants_you_need
or grab and compile the source from graphviz.org. Note: On Mac OS X, Pixelglow is a nice a front-end, you can even see the graph being built in real-time.
Using pd_machviz to generate a graph
The pd_machviz tool is available in the svn/hg trunk.
A simple example across otool dependencies
A hierarchical view:
The corresponding script output:
./pd_machviz /usr/bin/otool
Generate dependencies graphs of /usr/bin/otool
Legend:
1 + foo
2 |`- bar No more dependency
2 |`+ baz impure! /Blocker_1 -> file_involved_1 Impurity detected
2 |`+ baz impure! /Blocker_. -> file_involved_. Impurity detected
2 |`+ baz impure! /Blocker_n -> file_involved_n Impurity detected
2 |`+ baz Dependency found
3 | |`. qux Cached file (Already processed)
Now generating dependencies tree, please wait…
1 + /usr/bin/otool
2 |`+ /usr/lib/libgcc_s.1.dylib
3 | |`+ /usr/lib/libSystem.B.dylib
4 | | |`- /usr/lib/system/libmathCommon.A.dylib
2 |`. /usr/lib/libSystem.B.dylib
Generation of otool.dot complete.
Now drawing graphs from otool.dot, please wait…
Generation of otool.dot_directed.png complete.
Generation of otool.dot_circular.png complete.
Generation of otool.dot_radial.png complete.
Generation of otool.dot_undirected.png complete.
Generation of otool.dot_undirectedBIS.png complete.
A circular view of xterm dependencies
Checking for purity in passwd
Resources
http://www.graphviz.org the otool page
VMware
Many VMware products are now able to run a Darwin system (e.g., PureDarwin). From VMware Fusion 2.0 (Mac OS X) to VMware Player 2.5 (free download for Windows and Linux) via VMware ESX and later versions, PureDarwin should boot without any troubles.
A more precise list will be constituted if respective feedback is received.
Running PureDarwin in VMware
It is very easy to run PureDarwin with VMware.
Requirements
a VMware product a PureDarwin system (can be downloaded or produced)
- a ready-to-run .vmwarevm (read-write) or .vmdk
- a PureDarwin ISO, and either use it directly (read-only)
This ISO can be converted into a VMware disk image (.vmdk) file using a little conversion tool called
qemu-img'. The resulting disk image will be read-write, and can be mounted by double-clicking so that you can change its contents from the host system:qemu-img convert -O vmdk PureDarwin.iso PureDarwin.vmdk`
Launch VMware Fusion 2.0 or later and create a new machine based on the ISO or .vmdk - VMware Fusion will automatically recognize it as “Mac OS X Server” and configure the virtual machine accordingly. You do not need to change any settings.
Using VMware other than Fusion
Two KEXTs appeard useful for VMware release(s) other than Fusion:
- LegacyAppleIntelPIIXATA
- NullCPUPowerManagement They can be found in VMware-Drivers-OpenSource.zip. See Downloads page.
Settings
VMware settings
Enable the built-in VNC server
Add these lines in the .vmx file:
`RemoteDisplay.vnc.port = “5900” RemoteDisplay.vnc.enabled = “TRUE”
optional password:
RemoteDisplay.vnc.password = “password” `
Then simply connect your favorite VNC client to localhost.
Boot arguments
(please add text)
Faking guest OS detection
We need to fake VMware guest OS detection in order to avoid error message “The guest operating system is not Mac OS X Server” (implicitly to simply boot).
VMware guest OS detection is trivial, and so the way to avoid it:
touch "/Volumes/PureDarwin/System/Library/CoreServices/ServerVersion.plist"``
Note: This tweak should/could be deprecated by time.
Devices
VMware Fusion 2.0.5 Host: Mac OS X 9.7.0 Guest: PureDarwin (9J61)
Here’s a vendor/device id list retrieved from the VMware guest OS:
"0x8086","0x7191","Intel Corporation","82443BX/ZX","440BX/ZX AGPset PCI-to-PCI bridge"
“0x8086”,“0x7110”,“Intel Corporation”,“82371AB/EB/MB”,“PIIX4/4E/4M ISBridgeA “
“0x8086”,“0x7113”,“Intel Corporation”,“82371AB/EB/MB”,“PIIX4/4E/4M Power Management Controller”
“0x8086”,“0x7111”,“Intel Corporation”,“82371AB/EB/MB”,“PIIX4/4E/4M IDE Controller”
“0x15ad”,“0x0790”,“”,“”
[…] <- + x 30
“0x15ad”,“0x0790”,“”,“”
“0x8086”,“0x7112”,“Intel Corporation”,“82371AB/EB/MB”,“PIIX4/4E/4M USB Interface” “0x8086”,“0x100F”,“Intel Corporation”,“82545EM”,“Gigabit Ethernet Controller (copper)” “0x15AD”,“0x0770”,“VMware Inc.”,“n/a”,“Standard Enhanced PCI to USB Host Controller” “0x1274”,“0x1371”,“Ensoniq”,“ES 1371”,“AudioPCI” “0x1000”,“0x0030”,“LSI Logic”,“LSI53C1020/1030”,“PCI-X to Ultra320 SCSI Controller” “0x15AD”,“0x0405”,“VMware Inc.”,“9500MGS”,“NVIDIA” “0x15AD”,“0x0740”,“VMware Inc.”,“0X0880”,“VMWare VMCI Bus Device” “0x8086”,“0x7190”,“Intel Corporation”,“82443BX/ZX”,“440BX/ZX AGPset Host Bridge”
Boot
VMware Fusion BIOS
VMware Fusion comes with a combo PhoenixBIOS/VMware BIOS.
Bootloader
VMware uses darwin.iso (VMware Tools) which contains the DFE bootloader (Stage 2 boot file < 128K) to provide a bootloader.
darwin.iso
Located in /Library/Application Support/VMware Fusion/isoimages/original/darwin.iso ISO 9660 CD-ROM filesystem data ‘CD’ (bootable)
pdisk reports: Partition map (with 512 byte blocks) on ‘original/darwin.iso’ #: type name length base ( size ) 1: Apple_partition_map Apple 63 @ 1 2: Apple_HFS DiscRecording 3.2.0f2 6940 @ 244 ( 3.4M)
Device block size=2048, Number of Blocks=3339059200 (6.2T) DeviceType=0x0, DeviceId=0x0
The DFE bootloader: -r–r–r–@ 1 201 wheel 63520 Jun 23 00:20 /Volumes/VMware Tools/.hiddendir/boot (dfe’) In order to compare the siwe, Chameleon takes 295328B and the latest DFE 63648B.
Facing the bootloader size limitation:
It is possible to alter the content of darwin.iso, but the package needs to be signed again.
hdiutil -readwrite attach darwin.iso hdiutil eject.. openssl genrsa -out tools-priv.pem 2048 openssl rsa -in tools-priv.pem -pubout -out tools-key.pub openssl dgst -sha1 -sign tools-priv.pem < darwin.iso > darwin.iso.sig for A in *.iso ; do openssl dgst -sha1 -sign tools-priv.pem < $A > $A.sig ; done
Single user mode
It boots.
Multi user mode
It boots but fails because of read-only medium when a connected CD/DVD drive is configured to use a disk image (ISO). It works when a VMware disk image (.vmdk) is used since read-write is enabled (and functional) by default. Network
Emulated NICs
VMware seems to provide 3 emulated NIC:
- e1000
- **VMware NIC - vmxnet **High performance (Gigabit), need VMware drivers in the guest. OK for production.
- **VLANCE (aka AMD PCNET-32) **Lower perf, high CPU load, no kext available, problems solved. Update November 2012: A driver is in the works at https://code.google.com/p/pcnet32-driver-for-puredarwin/ - information about this driver still needs to be worked into this page
e1000
VMware emulates an Intel e1000 network card. “e1000” is apparently a generic term for a series of similar but different chips. http://www.intel.com/design/network/products/lan/controllers/82545.htm
``
**82547EI-A1 8086h 1019h Copper 82547EI-B0 8086h 1019h Copper 82547EI-B0 8086h 101Ah Mobile 82547GI-B0 8086h 1019h Copper 82546EB-A1 8086h 1010h Copper; Dual Port MAC Default 82546EB-A1 8086h 1012h Fiber; Dual Port 82546EB-A1 8086h 101Dh Copper; Quad Port 82546GB-B0 8086h 1079h Copper; Dual Port ** **82546GB-B0 8086h 107Ah Fiber; Dual Port 82546GB-B0 8086h 107Bh SerDes; Dual Port ** 82545EM-A 8086h 100Fh Copper 82545EM-A 8086h 1011h Fiber **82545GM-B 8086h 1026h Copper MAC Default ** **82545GM-B 8086h 1027h Fiber ** 82545GM-B 8086h 1028h SerDes **82544EI-A4 8086h 1107h Copper MAC Default ** **82544GC-A4 8086h 1112h Copper MAC Default ** **82541EI-A0 8086h 1013h Cooper MAC Default ** **82541EI-A0 8086h 1013h Cooper MAC Default ** **82541EI-B0 8086h 1013h Cooper MAC Default ** 82541EI-B0 8086h 1018h Mobile **82541GI-B1 8086h 1076h Cooper ** **82541GI-B1 8086h 1077h Mobile ** **82541PI-C0 8086h 1076h Cooper ** **82541ER-C0 8086h 1078h Cooper ** **82540EP-A 8086h 1017 Desktop ** **82540EP-A 8086h 1016 Mobile ** **82540EM-A 8086h 100E Desktop ** **82540EM-A 8086h 1015 Mobile **
Status
The VMware virtual device chipset seems to correspond to the Intel82545EM (Copper)
- Vendor ID: 0x8086
- Primary device ID: 0x100F
Mac OS X contains a driver (AppleIntel8254XEthernet) for the chip emulated by VMware which “should match and work”. But this driver is not available for Darwin yet, neither in source nor binary form.
We found also two KEXTs close (but not enough “by nature”) to the VMware 82545EM virtual device:
- AppleIntel8255x (built from the Darwinbuild project)
- 82566mm-osx-driver (an OpenSource one) Both of the two KEXTs personality file (Info.plist) can be modified to match the VMware virtual device in order to be (kext)loaded at boot. But no interface (e.g., en0) is affected…
The e1000 support quest
Notions
Driver and IOPCIDevice
PCI stands for Peripheral Component Interconnect.
A driver for a PCI Ethernet controller inherits from IOEthernetController but uses an instance of IOPCIDevice class (in order to connect to the PCI bus). IOPCIDevice is a basic nub class representing any PCI device in any PCI slot.
Ethernet driver <-> IOPCIDevice <-> IOPCIBridge <-> IOPlatformDevice <-> …
PCI matching summarization
A driver can control a device on a PCI bus. A driver announces this fact by including a “personality” in its plist file. This personality includes IOProviderClass=IOPCIDevice (Key=Value). IOPCIDevice defines 2 sets of keys that a driver can use for matching:
- a key based on standard PCI registers
- a key based on Open Firmware (probably related to PPC only) A PCI device driver can use one type of key or both of them (if personalities are disjoint)
Vendor and Device IDs
Vendor ID (intel def.)
This uniquely identifies all Intel PCI products. This field may be auto-loaded from the EEPROM at power on or upon the assertion of PCI_RST#. A value of 0x8086 is the default for this field upon power up if the EEPROM does not respond or is not programmed.
Device ID (Intel def.)
This uniquely identifies the Ethernet controller. This field may be autoloaded from the EEPROM at power on or upon the assertion of RST#. The default value for this field is used upon power up if the EEPROM does not respond or is not programmed.
PCI configuration space registers
- vendor and device ID (offsets 0x00 and 0x002)
- subsystem vendor and device ID (offsets 0x2C and 0x2E)
- class code (offset 0x09)
- revision ID (not available in property matching)
- header type (not available in property matching)
PCI matching dictionary
Value for a key can be a single register value or a list (space separator). Register values are little-endian hexa strings (device ID first then vendor ID). A mask can be included (only a part of the value is compared), bits set to 0 are ignored by the mask
- IOPCIMatch matches against primary vendor/device ID registers (checked first) or matches aganst the subsystem vendor/device ID
- IOPCIPrimaryMatch matches against primary vendor/device ID registers
- IOPCISecondaryMatch matches against the subsystem vendor/device ID registers
- IOPCIClassMatch matches against the class code register Examples of corresponding key/value based on vendor and device id which can be expected in Info.plist:
Vendor ID: 0x8086
Primary device ID: 0x100F
<key>IOPCIMatch</key>
``
Vendor ID: 0x8086 Primary device ID: 0x1000 or 0x100F
<key>IOPCIMatch</key>
0x10008086 0x100F8086
Vendor ID: 0x8086 Primary device ID: 0x1000..0x10FF (first two digits subsystem IDs are not checked)
<key>IOPCIPrimaryMatch</key>
Class code for ethernet controller (0x0200 (in fact 4bytes, last byte ignored))
<key>IOPCIClassMatch</key>
Which is confirmed on
- FreeBSD: **
- GNU/Linux:
- Intel: From the “Intel PCI/PCI-X Family of Gigabit Ethernet Controllers Software Developer’s Manual”, A list of pair model / device id is available in the Intel spec, which confirm the result above ( “IOModel” = “82545EM Copper” )
- e1000 from sourceforge: 82540EP/EM, 82541xx, 82544GC/EI, 82545GM/EM, 82546GB/EB, and 82547xx http://kent.dl.sourceforge.net/sourceforge/e1000/OpenSDM_8254x-37.pdf
- http://www.pcidatabase.com/vendor_details.php?id=1302 also. Note: “When running VMware ESX Server 3.0.0, you can experience a kernel panic if you use Intel e1000 network adapters with any of the following PCI IDs: 0x100F[…]” - http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2221
Real KEXTs
w/o KEXT
Example without any network kext loaded (according to kextstat and grep): Quickly finding the node into ioreg: class is IOPCIDevice even the IOName and name are the only “ethernet” occurence found 0x0200 is the class code for ethernet 0x8086 is the vendor id
| | | | {
| | | | "IOPCIResourced" = Yes
| | | | "IOInterruptControllers" = ("io-apic-0")
| | | | "subsystem-id" = <50070000>
| | | | "IODeviceMemory" = (({"address"=18446744073048031232,"length"=131072}),({"address"=18446744073047900160,"le$
| | | | "IOPowerManagement" = {"CurrentPowerState"=2}
| | | | "revision-id" = <01000000>
| | | | "IOInterruptSpecifiers" = (<1300000007000000>)
| | | | "assigned-addresses" = <1008028200000000000092d800000000000002001808028200000000000090d80000000000000100200$
| | | | "IOChildIndex" = 2
| | | | "built-in" = <00>
| | | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | | "device-id" = <0f100000>
| | | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/P2P0@110000/S2F0@10000"
| | | | "subsystem-vendor-id" = <ad150000>
| | | | "name" = "ethernet"
| | | | "reg" = <00080200000000000000000000000000000000001008020200000000000000000000000000000200180802020000000000$
| | | | "compatible" = <"pci15ad,750","pci8086,100f","pciclass,020000">
| | | | }
AppleIntel8255x
Intel82566MM.kext can be build and loaded.
Info.plist needs to be modified to match VMware device.
No interface is shown..
With 0x8086 0x100F:
Jul 14 20:56:15 PureDarwin kernel[0]: i82557eeprom: checksum fffe incorrect
Jul 14 20:56:15 PureDarwin kernel[0]: Intel82557: couldn’t allocate eeprom object
Intel82566MM
Intel82566MM.kext can be build and loaded.
Info.plist needs to be modified to match VMware device.
No interface is shown..
Jul 12 19:17:19 PureDarwin kernel[0]: venderid: 0x8086 deviceid: 0x100f.
It seems really clear that this kext has been derivated from the FreeBSD branch too (even comments are almost identic).
Editing the plist is naturally not enough, so after adding a couple of defines and enable debug on stdout, it looks like:
Jul 15 00:38:44 PureDarwin kernel[0]: Intel82566MM debug: bool Intel82566MM::Init(OSDictionary *properties).
Jul 15 00:38:44 PureDarwin kernel[0]: Intel82566MM debug: Intel82566MM::start(IOService * provider)
Jul 15 00:38:44 PureDarwin kernel[0]: Intel82566MM debug: Intel82566MM::createWorkLoop().
Jul 15 00:38:45 PureDarwin kernel[0]: Intel82566MM debug: Intel82566MM::getWorkLoop() const.
Jul 15 00:38:45 PureDarwin kernel[0]: Intel82566MM debug: Intel82566MM::createOutputQueue().
Jul 15 00:38:45 PureDarwin kernel[0]: Intel82566MM debug: Intel82566MM::getWorkLoop() const.
Jul 15 00:38:45 PureDarwin kernel[0]: Intel82566MM debug: Intel82566MM::getPacketBufferConstraints.
Jul 15 00:38:45 PureDarwin kernel[0]: venderid: 0x8086 deviceid: 0x100f.
Jul 15 00:38:45 PureDarwin kernel[0]: Intel82566MM debug: Intel82566MM::e1000_read_pcie_cap_reg(struct e1000_hw *hw, UInt32 reg, UInt16 *value)
Jul 15 00:38:45 PureDarwin kernel[0]: Intel82566MM debug: flashPCIAddress.
Jul 15 00:38:45 PureDarwin kernel[0]: Intel82566MM debug: void Intel82566MM::free()
The red part can be found in Intel82566M.cpp and corresponds to:
if (flashPCIAddress == NULL) { e_debug(“flashPCIAddress.n”); goto FAILED_OPENED; }
Which irremediably leads to
FAILED_OPENED: pciDevice->close(this); At “free()”, it’s already too late anyway..
After altering a bit the code, we can go further.. but not so far.
In the FreeBSD src code:
/**
-
e1000_read_mac_addr_82540 - Read device MAC address
-
@hw: pointer to the HW structure
-
Reads the device MAC address from the EEPROM and stores the value.
-
Since devices with two ports use the same EEPROM, we increment the
-
last bit in the MAC address for the second port.
-
This version is being used over generic because of customer issues
-
with VmWare and Virtual Box when using generic. It seems in
-
the emulated 82545, RAR[0] does NOT have a valid address after a
-
reset, this older method works and using this breaks nothing for
-
these legacy adapters.
**/
kextload:
kextload more verbose:
[…]
kextload: module /System/Library/Extensions/IONetworkingFamily.kext/Contents/MacOS/IONetworkingFamily (identifier com.apple.iokit.IONetworkingFamily) is already loaded
kextload: link/loading file /System/Library/Extensions/System.kext/PlugIns/IOKit.kext/IOKit
kextload: link/loading file /System/Library/Extensions/System.kext/PlugIns/Unsupported.kext/Unsupported
kextload: link/loading file /System/Library/Extensions/System.kext/PlugIns/Libkern.kext/Libkern
kextload: link/loading file /System/Library/Extensions/System.kext/PlugIns/Mach.kext/Mach
kextload: link/loading file /System/Library/Extensions/System.kext/PlugIns/BSDKernel.kext/BSDKernel
kextload: link/loading file /System/Library/Extensions/IOPCIFamily.kext/IOPCIFamily
kextload: using existing load address 0xd19a000 (0xd19ac40 with header pad)
kextload: kmod name: com.apple.iokit.IOPCIFamily
kextload: kmod start @ 0xd1a6333 (offset 0xb6f3)
kextload: kmod stop @ 0xd1a6376 (offset 0xb736)
kextload: link/loading file /System/Library/Extensions/IONetworkingFamily.kext/Contents/MacOS/IONetworkingFamily
kextload: using existing load address 0xf888000 (0xf888c40 with header pad)
kextload: kmod name: com.apple.iokit.IONetworkingFamily
kextload: kmod start @ 0xf8983e0 (offset 0xf7a0)
kextload: kmod stop @ 0xf898423 (offset 0xf7e3)
kextload: link/loading file /System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/Intel82566MM.kext/Contents/MacOS/Intel82566MM
kextload: allocated 53248 bytes in kernel space at 0xff7d000
kextload: using load address of 0xff7d000
kextload: kmod name: com.tootoosoft.driver.Intel82566MM
kextload: kmod start @ 0xff802cd (offset 0x268d)
kextload: kmod stop @ 0xff80310 (offset 0x26d0)
kextload: module com.tootoosoft.driver.Intel82566MM created as # 64 at address 0xff7d000, size 53248
kextload: module # 64 reference counts incremented
kextload: module # 64 started
kextload: /System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/Intel82566MM.kext loaded successfully
kextload: loading personalities for extension /System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/Intel82566MM.kext and dependencies
kextload: sending personalities to kernel:
kextload: from extension /System/Library/Extensions/IONetworkingFamily.kext:
kextload: IONetworkStack
kextload: Kernel Debugging Driver
kextload: from extension /System/Library/Extensions/IOPCIFamily.kext:
kextload: IOPCI2PCIBridge-Name
kextload: IOPCI2PCIBridge-i386
kextload: IOPCI2PCIBridge-PCI
kextload: from extension /System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/Intel82566MM.kext:
kextload: Intel82566MM
kextload: sending 6 personalities to the kernel
kextload: matching started for /System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/Intel82566MM.kext
AppleIntel8254XEthernet
Cannot be built (no source). Cannot be redistributed as binary form. Load, match and work (interface en0 is affected, network is functional).
1017-Jul 12 19:25:51 PureDarwin kernel[0]: Ethernet [Intel8254X]: Link down on en0 called by disable() – 1018-Jul 12 19:25:51 PureDarwin kernel[0]: Can’t unload com.apple.driver.AppleIntel8254XEthernet due to - 1019:Jul 12 19:26:28 PureDarwin kernel[0]: venderid: 0x8086 deviceid: 0x100f. 1020-Jul 12 19:26:28 PureDarwin kernel[0]: AppleIntel8254XEthernet: Ethernet address 00:0c:29:69:17:26 1021-Jul 12 19:26:28 PureDarwin kernel[0]: Ethernet [Intel8254x]: Link up on en0, 1-Gigabit, Full-duplex, No flow-control, Debug [796d,ac08,0de1,0200,41e1,7c00] 1022-Jul 12 19:26:29 PureDarwin mDNSResponder[24]: Note: Frequent transitions for interface en0 (FE80:0000:0000:0000:020C:29FF:FE69:1726); network traffic reduction measures in effect
This KEXTs seems to support all these chips:
82540EM 82540EM LOM 82540EP 82540EP LOM 82540EP LP 82543GC Copper 82543GC Fiber 82544EI Copper 82544EI Fiber 82544GC Copper 82544GC LOM 82545EM Copper 82545EM Fiber 82545GM Copper 82545GM Fiber 82545GM SERDES 82546EB Copper 82546EB Fiber 82546GB Copper 82546GB Fiber 82546GB SERDES 82541EI 82541EI Mobile 82541ER 82541GI 82541GI Mobile 82547EI 82547GI
Values found (non exhaustive) interesting have been highlighted.
| | | +-o S2F0@1 <class IOPCIDevice, registered, matched, active, busy 0, retain 9>
| | | | | {
| | | | | "IOPCIResourced" = Yes
| | | | | "IOInterruptControllers" = ("io-apic-0")
| | | | | "IOName" = "ethernet"
| | | | | "subsystem-id" = <50070000>
| | | | | "IODeviceMemory" = (({"address"=18446744073048031232,"length"=131072}),({"address"=18446744073047900160,"le$
| | | | | "IOPMPCIConfigSpaceVolatile" = No
| | | | | "class-code" = <00000200>
| | | | | "EEPROM Version" = "0.0"
| | | | | "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2}
| | | | | "revision-id" = <01000000>
| | | | | "IOInterruptSpecifiers" = (<1300000007000000>)
| | | | | "assigned-addresses" = <1008028200000000000092d800000000000002001808028200000000000090d80000000000000100200$
| | | | | "IOChildIndex" = 2
| | | | | "built-in" = <00>
| | | | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | | | "device-id" = <0f100000>
| | | | | "vendor-id" = <86800000>
| | | | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/P2P0@110000/S2F0@10000"
| | | | | "subsystem-vendor-id" = <ad150000>
| | | | | "name" = "ethernet"
| | | | | "EEPROM Checksum Valid" = Yes
| | | | | "reg" = <00080200000000000000000000000000000000001008020200000000000000000000000000000200180802020000000000$
| | | | | "compatible" = <"pci15ad,750","pci8086,100f","pciclass,020000">
| | | | | }
| | | | |
| | | | +-o AppleIntel8254XEthernet <class AppleIntel8254XEthernet, !registered, !matched, active, busy 0, retain 6>
| | | | | {
| | | | | "IOProbeScore" = 10000
| | | | | "Driver Parameters" = {"TxQueueSize"=4096,"RxAbsoluteTimer1000"=64,"Offload TCP/IP Checksum"=Yes,"EnableL$
| | | | | "CFBundleIdentifier" = "com.apple.driver.AppleIntel8254XEthernet"
| | | | | "IODefaultMedium" = "00000020"
| | | | | "IOSelectedMedium" = "00000020"
| | | | | "IOMatchCategory" = "IODefaultMatchCategory"
| | | | | "IOLinkSpeed" = 1000000000
| | | | | "IOPowerManagement" = {"CurrentPowerState"=1}
| | | | | "IOVendor" = "Intel"
| | | | | "IOPacketFilters" = {"IONetworkFilterGroup"=275,"IOEthernetWakeOnLANFilterGroup"=0}
| | | | | "IOMACAddress" = <000c29691726>
| | | | | "IOProviderClass" = "IOPCIDevice"
| | | | | "IOFeatures" = 10
| | | | | <span style="background-color:rgb(180,167,214)"> "IOPCIClassMatch" = "0x02000000&0xffff0000" </span>
| | | | | "IOLinkStatus" = 3
| | | | | "IOMaxPacketSize" = 9018
| | | | | "IOMinPacketSize" = 64
| | | | | "IOMediumDictionary" = {"00500023"={"Type"=5242915,"Index"=6,"Flags"=0,"Speed"=10000000},"00100026"={"Typ$
| | | | | <span style="background-color:rgb(159,197,232)"> "IOPCIPrimaryMatch" = "0x10008086&0x0000ffff" </span>
| | | | | "IOModel" = "82545EM Copper"
| | | | | "IOClass" = "AppleIntel8254XEthernet"
| | | | | "IOActiveMedium" = "00100030"
| | | | | "EN Number" = 0
| | | | | }
| | | | |
| | | | +-o IOEthernetInterface <class IOEthernetInterface, registered, matched, active, busy 0, retain 10>
| | | | | {
| | | | | "IOMediaAddressLength" = 6
| | | | | "IOPrimaryInterface" = Yes
| | | | | "IOInterfaceType" = 6
| | | | | "IORequiredPacketFilters" = {"IONetworkFilterGroup"=19,"IOEthernetWakeOnLANFilterGroup"=0}
| | | | | "IOInterfaceFlags" = 34915
| | | | | "IOInterfaceExtraFlags" = 1073744192
| | | | | "IOInterfaceUnit" = 0
| | | | | "IONetworkData" = {"IOEthernetStatsKey"={"Size"=216,"Data"=<0000000000000000000000000000000000000000000$
| | | | | "BSD Name" = "en0"
| | | | | "IOLocation" = ""
| | | | | "IOMaxTransferUnit" = 1500
| | | | | "IOInterfaceNamePrefix" = "en"
| | | | | "IOBuiltin" = Yes
| | | | | "IOActivePacketFilters" = {"IONetworkFilterGroup"=19,"IOEthernetWakeOnLANFilterGroup"=0}
| | | | | "IOMulticastAddressList" = <01005e0000fb01005e0000013333000000fb33333e2cf1a83333000000013333ff691726>
| | | | | "IOInterfaceState" = 3
| | | | | "IOMediaHeaderLength" = 14
| | | | | "IOControllerEnabled" = Yes
| | | | | }
| | | | |
| | | | +-o IONetworkStack <class IONetworkStack, registered, matched, active, busy 0, retain 7>
| | | | | {
| | | | | "IOProviderClass" = "IOResources"
| | | | | "IOMatchCategory" = "IONetworkStack"
| | | | | "IOProbeScore" = 0
| | | | | "IOClass" = "IONetworkStack"
| | | | | "CFBundleIdentifier" = "com.apple.iokit.IONetworkingFamily"
| | | | | "IOResourceMatch" = "IOBSD"
| | | | | }
| | | | |
| | | | +-o IONetworkStackUserClient <class IONetworkStackUserClient, !registered, !matched, active, busy 0, ret$
| | | | {
| | | | }
A // with its Info.plist (.. file) can be established:
[…] <dict>
<key>CFBundleIdentifier</key>``
<key>IOClass</key>AppleIntel8254XEthernet<key>IODefaultMedium</key>00000020<key>IOPCIClassMatch</key>0x02000000&0xffff0000 <key>IOPCIPrimaryMatch</key>0x10008086&0x0000ffff <key>IOProviderClass</key>IOPCIDevice
``
a KEXT pseudo-life
The driver inspects and configure the PCI Device
- driver examines the values in the PCI configuration space registers (e.g., revision ID register)
- driver sets some value of them (e.g., enable memory write)
- driver interacts with its device
(random notes: ipconfig set en0 NONE before kextunload <- not tested)
Pseudo-pre-deduction: If the kext is loaded but no interface, could it be?:
start{style=“font-size:11px;font-family:Monaco,Courier,Consolas,monospace”}- The
start{style=“font-size:11px;font-family:Monaco,Courier,Consolas,monospace”} function should initialize the device to a working state. It also needs to create a network object and make it visible to the networking stack as an interface
network driver’s start function:
- set network interface object
- a work loop
- an output queue
- specific resources
- (also retains its provider nub (IOPCIDevice?))
In order to open the Provider nub, the driver should:
- verify that it is of the appropriate class
- retain a reference to it
- open it in order to access its services
Host NIC
Restarts all the vmnet services on the host side:
/Library/Application Support/VMware Fusion/boot.sh --restart
Troubleshooting
On read-only medium
The tty is flooded with log telling attempt to write on a read-only medium (ie: auth mechanism too) does not work. **** Another obvious implicit goal is to install PureDarwin with PureDarwin.
Random log
Aug 28 18:58:15.129: vmx| Licensecheck: Invalid license file.
Aug 28 18:58:15.131: vmx| Host: SRAT tables not found in memory
Aug 28 18:58:15.480: vmx| Topology discovery error: /Library/Preferences/com.apple.windowserver.plist doesn't contain expected key.
Aug 28 18:58:15.742: vmx| DISK: Disabling unbuffered I/O on ide0:0 to work around Apple bugs 5679432 and 6048690.
Sep 27 11:52:13.472: vmx| PTSC: failed to read the TSCs.
Sep 27 11:52:17.727: vmx| Error: Encountered Apple bug #5202831. Disconnecting.
Sep 27 11:52:36.086: vcpu-0| CDROM ide1:0: CMD 0xad (*UNKNOWN (0xad)*) FAILED (key 0x5 asc 0x24 ascq 0)
Resources
ftp://download.intel.com/design/network/specupdt/82545em.pdf http://www.intel.com/design/network/products/lan/docs/82545.htm http://download.intel.com/design/network/manuals/8254x_GBe_SDM.pdf
http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&ProductID=990&DwnldID=3294&strOSs=52&OSFullName=FreeBSD*&lang=eng FreeBSD* 4.7 to 4.10 driver for all Intel® PRO/1000 gigabit Ethernet adapters. Valid for the 82540, 82542, 82543, 82544, 82545, 82546 and 82547 controllers.
http://developer.apple.com/documentation/DeviceDrivers/Conceptual/NetworkDriver/1_Intro/Intro.html http://developer.apple.com/documentation/DeviceDrivers/Conceptual/NetworkDriver/4_Writing%20the%20Driver/NetworkController.html
http://developer.apple.com/documentation/HardwareDrivers/Conceptual/HWTech_Ethernet/Introduction/ENet_intro.html http://developer.apple.com/documentation/Hardware/Conceptual/HWtech_PCI/Articles/pci_implementation.html http://developer.apple.com/documentation/Darwin/Conceptual/NetworkKernelExtensions/about/about.html http://developer.apple.com/documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/KEXTIntro.html http://developer.apple.com/documentation/DeviceDrivers/Conceptual/WritingPCIDrivers/pci_device/pci_device.html http://download.intel.com/design/network/manuals/8255X_OpenSDM.pdf
https://code.google.com/p/pcnet32-driver-for-puredarwin/ - information about this driver still needs to be worked into this page
what
what is a tool showing what versions of object modules were used to construct a file.
Using what
As example:
$ what /usr/lib/libSystem.B.dylib
/usr/lib/libSystem.B.dylib
Libsyscall-1228.5.18~1 05/23/08 00:34:41 PDT
Libc-498.1.1~5 04/15/08 22:44:26 PDT
Libsystem-111.1.1~2 07/10/08 18:12:54 PDT
PROGRAM:commonCrypto PROJECT:CommonCrypto-32207
libdyld-96.2~143 05/23/08 00:33:39 PDT
Libinfo-278.0.3~2 04/07/08 12:29:06 PDT
libdns_sd mDNSResponder-171.4 (Apr 20 2008 11:16:45)
Libm-292.4 Mar 11 2008 23:06:24
LIBRARY:libmacho PROJECT:cctools_ofiles-667.3~138 DEVELOPER:root BUILT:Mon Apr 7 16:19:07 PDT 2008
Libnotify-35~3 09/23/07 14:39:00 PDT
Libunc-21~150 09/23/07 14:39:04 PDT
launchd_libs-258.12~1 04/03/08 17:35:26 PDT
copyfile-42~24 03/04/08 21:17:45 PST
Seatbelt_libs-107.1~456 05/23/08 00:33:32 PDT
quarantine-22~35 09/23/07 14:38:59 PDT
removefile-11~1 12/12/07 13:59:48 PST
Ressource
man what
wishlist
This page contains a list of known Apple closed-source projects that we would like to see Apple release as open-source or binary-only roots. Packages here should meet the following requirements:
- Package should be extremely useful to PureDarwin
- Package’s potential release as open-source should not be unreasonable (eg, Foundation-667.22)
- Packages listed here should include justification as to why they would be useful.
X.Org
This page is about X.Org on Darwin.
XDarwin
Update June 2012: Guillaume Verdeau has released patches to get Xorg running on PureDarwin. Please see the announcement. The remainder of this page is left here for historical reasons. It needs to be rewritten to reflect the above.
History of X.Org on Darwin
From http://www.x.org/archive/X11R6.8.0/doc/Darwin2.html
“The X window server for Darwin and Mac OS X provided by the X.Org Foundation. is called XDarwin. (…) XDarwin can also be run from the Darwin console in IOKit mode. (…) From the console, the Darwin port of X11R6.8 uses the IOKit for device driver loading and discovery, rather than the X11R6.8 module loader. Because of this, the X11R6.8 configuration file is not used on Darwin or Mac OS X systems. The descriptions found elsewhere of devices supported by X11R6.8 for other operating systems also do not apply. (…) X11R6.8 for Darwin or Mac OS X will work with any video card that you have an IOKit driver for. (…) If you have a pure Darwin installation, you may need to download additional third-party drivers from Apple’s Darwin site. IOKit drivers are typically installed in /System/Library/Extensions/ or /Library/Extensions/.”
X.app
The X.app that is shipped with Leopard apparently lacks the IOKit mode that would be needed for Darwin, as it apparently only supports the Quartz modes:
Quartz modes (Experimental / In Development): -fullscreen : run full screen in parallel with Mac OS X window server. -rootless : run rootless inside Mac OS X window server.
Is there a way to get the IOKit mode back?
X.Org in MacPorts
It seems like it needs some work, since all it currently does is print the following message: build a version that needs Quartz (which is not available in PureDarwin). The source subdirectory hw/darwin/iokit apparently has been removed and needs to be resurrected.
``
---> Fetching xorg
Error: Target org.macports.fetch returned:
Hi, my name is xorg, I am broken for the time being, so please do not file a bug for me.
Instead, you can use Apple's X11 that is provided on the OS X install CDs ...
and also install the X11 SDK from Xcode Tools because they are both required.
There is also a working XFree86 port and ongoing development to port X11R7 to OS X.
X.Org in fink
fink (which is basically apt-get for Mac OS X and Darwin) contains two binary packages
- xorg-shlibs_6.8.2-1040_darwin-i386.deb
- xorg_6.8.2-1040_darwin-i386.deb These can be unpacked to a PureDarwin volume by: sudo su cd /Volumes/PureDarwin/ UNP=$(find xorg*_darwin-i386.deb 2>/dev/null) && for UN in $UNP; do ar p $UN data.tar.gz | zcat | tar xv ; done Then we can try to run them on PureDarwin with export PATH=/usr/X11R6/bin:$PATH startx However, it turns out that this links to ApplicationServices which is not a part of Darwin and hence makes these packages worthless for PureDarwin. Please let us know if otherwise!
Ressources
XBS
What is XBS?
In case you come across the term “XBS”: Apparently, this is what Apple’s Build and Integration team uses to compile projects for Mac OS X. It is a proprietary build system and is not available outside Apple.
For the outside world, there is [[DarwinBuild]] instead. It is not known how much the two build systems have in common.
References
- Private Compiler Tools Release Note (mit.edu)
- X11 source code: structure, building
- ld_classic man page
XFree86
This page is about XFree86 on Darwin.
__ __
XFree86 4.7.0
XFree86 is another X11 implementation besides X.Org. Version 4.7.0 was released in 2007. Most binaries you can find on the net (e.g., in fink) are built for Mac OS X, and will fail to run on PureDarwin since they depend on closed frameworks such as ApplicationServices. Hence, we need to compile XFree86 specifically for PureDarwin, and MacPorts can help us with this task. ``
XFree86 in MacPorts
MacPorts contains a portfile which can be used to compile XFree86 for PureDarwin. In old release notes, it is stated that “Darwin/Mac OS X uses IOKit drivers and does not use the module loader drivers listed above. Further information can be found in README.Darwin”. Also take a look at Using the MacPorts project page for more information about MacPorts. `` The portfile shows the following information about Xfree86, among other things:
port info XFree86
``
(…)
Platforms: darwin freebsd
In the case of +puredarwin variant is choosen, this is what happens:
platform puredarwin {
post-patch {
set hostfd [open "${worksrcpath}/config/cf/host.def" a+]
puts $hostfd "#define DarwinQuartzSupport NO"
puts $hostfd "#define BuildGlxExt YES"
puts $hostfd "#define BuildGLXLibrary YES"
close $hostfd
}
}
Compiling XFree86 for PureDarwin
We are using MacPorts on a Mac and transfer the final build products to a PureDarwin system thereafter, as described on the MacPorts page. Later, we will be able to bootstrap MacPorts on PureDarwin in order to provide products built on a PureDarwin system for a PureDarwin system.
Note: You should configure MacPorts to procuce tbz2 archives as described on that page.
Add -v for verbose output.
First, you need to move a symlink to Apple’s X.Org (X11.app) so that it doesn’t interfere with XFree86 from MacPorts: sudo mv /usr/X11R6 /usr/X11R6.apple
Then do:
port archive xfree86 +puredarwin If the build succeeds, you should see:
Warning: XFree86 requests to install files outside the common directory structure!
---> Installing XFree86 4.7.0_0+macosx+puredarwin
---> Activating XFree86 4.7.0_0+macosx+puredarwin
---> Cleaning XFree86
---> Removing build directory for XFree86
On Mac OS X, the symbolic link created with MacPorts is wrong.
Before we install XFree86, let's build some libraries that are needed by many applications that run on X.Compiling FreeType for PureDarwin
Many graphical applications need freetyp, so we need to compile it in a way that it can be used on PureDarwin. We need to patch the Portfile with
sed -i 's|--with-old-mac-fonts|--without-ats|g' /opt/local/var/macports/sources/*/release/ports/print/freetype/Portfile
TODO: the portfile should get a “puredarwin” section that sets this option automatically. Build it with
sudo /opt/local/bin/port archive freetype +puredarwin
To be sure, check that the output of
/opt/local/var/macports/sources/*/release/ports/print/freetype/work/destroot/opt/local/bin/freetype-config --libs
does not contain ApplicationServices or other proprietary frameworks. The following output is fine
-L/opt/local/lib -lfreetype -lz
whereas this would not be fine
-L/opt/local/lib -lfreetype -lz -Wl,-framework,CoreServices -Wl,-framework,ApplicationServices
Installing XFree86 on PureDarwin
First, install on your PureDarwin system what you have compiled above.
cd /Volumes/PureDarwin
tar xfvj /opt/local/var/macports/packages/darwin/i386/XFree86-4.7.0_0+macosx+puredarwin.i386.tbz2
curl http://src.macosforge.org/BinaryDrivers/8C46/GraphicsDrivers.root.tar.gz > GraphicsDrivers.root.tar.gz tar xfvz GraphicsDrivers.root.tar.gz curl http://src.macosforge.org/Roots/9C31/IOGraphics.root.tar.gz > IOGraphics.root.tar.gz
tar xfvz IOGraphics.root.tar.gz
The compiled XFree86 from the MacPorts project has the following library dependencies. Make sure these are present on your PureDarwin system:
- libfreetype.6.dylib
- usr/lib/libz.1.dylib
- /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
- /usr/lib/libgcc_s.1.dylib
- /usr/lib/libSystem.B.dylib
You also need to have in the PureDarwin system:
- IOGraphicsFamily.kext (from DarwinBuild)
- VMwareIOFramebuffer.kext (optional - if using VMware; from the VMware Tools)
Running XFree86 on PureDarwin
Make sure the KEXTs are loaded:
kextload /System/Library/Extensions/IOGraphicsFamily.kext
kextload /System/Library/Extensions/VMwareIOFramebuffer.kext
Additionally, in order to add your keyboard, mouse and/or trackpad support for XFree86, you should load the corresponding kernel extension. In case of PS2, take a look at the PS2 Controller page.
Notes: USB mouse and Apple MacBook trackpad works. PS2 not (yet) tested.
Launch X with
mount -uw / # need to be rw so that /tmp/.tX0-lock and /tmp/.X11-unix socket can be created
export PATH=/usr/X11R6/bin:$PATH
export DISPLAY=:0.0
X -nolisten tcp -size 800 600 -keymap USA.keymapping & sleep 3 && xeyes
Screenshots
The oldschool twm remains functional.
Also the minimalist wmii.
Fluxbox now!
Windowmaker compiles and runs like a charm as soon as we get rid of problematic dependencies.
Idem for enlightenment 17.
qt3 and qt4-x11 are almost ok.
Troubleshooting
Conflicting /usr/X11R6
Problem:
port install xfree86 +puredarwin
[...]
---> Fetching XFree86
Error: Target org.macports.fetch returned:
You have an Apple X11 installation already.
MacPorts will not overwrite it.
If you really want to use XFree86 instead,
please move it aside first :
sudo mv /usr/X11R6 /usr/X11R6.apple
Error: Status 1 encountered during processing.
sudo mv /usr/X11R6 /usr/X11R6.apple
MAXHOSTNAMELEN undeclared
Problem: port install xfree86 +puredarwin
[…]
In file included from x11trans.c:82: ../../lib/xtrans/Xtranssock.c:1378: error: ‘MAXHOSTNAMELEN’ undeclared here (not in a function) make[4]: *** [x11trans.o] Error 1 make[3]: *** [all] Error 1 make[2]: *** [all] Error 1 make[1]: *** [World] Error 2 make: *** [World] Error 2 Error: Status 1 encountered during processing.
--- xc/lib/xtrans/Xtranssock.c.origin`` ``2008-09-29 21:07:46.000000000 +0200
+++ xc/lib/xtrans/Xtranssock.c`` ``2008-09-29 21:40:00.000000000 +0200
@@ -284,6 +284,8 @@
#ifndef __USLC__
#pragma weak getaddrinfo
#endif
+#else
+#define MAXHOSTNAMELEN 256
#endif
static int haveIPv6 = 1;
#endif
decompress.c error
Problem:
port install xfree86 +puredarwin
[…]
/usr/bin/cc -c -Wall -Wpointer-arith -no-cpp-precomp -fno-common -I. -I../include -I../../../programs/Xserver/include -I../../../exports/include "-I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_x11_XFree86/work/include" -D__i386__ -D__DARWIN__ -DNO_ALLOCA -DCSRG_BASED -DFONTDIRATTRIB `` `` -DBUILD_SPEEDO -DBUILD_TYPE1 -DBUILD_CID `` `` -DBUILD_FREETYPE -DFONT_ENCODINGS_DIRECTORY="/usr/X11R6/lib/X11/fonts/encodings/encodings.dir" -DX_GZIP_FONT_COMPRESSION `` ``-Os -fno-strict-aliasing decompress.c -o unshared/decompress.o
decompress.c:96: error: syntax error before 'z_magic'
[...]
decompress.c:464: error: dereferencing pointer to incomplete type make[5]: *** [decompress.o] Error 1 make[4]: *** [fontfile] Error 1 make[3]: *** [all] Error 1 make[2]: *** [all] Error 1 make[1]: *** [World] Error 2 make: *** [World] Error 2
Warning: the following items did not execute (for XFree86): org.macports.activate org.macports.build org.macports.destroot org.macports.install
Error: Status 1 encountered during processing.
Solution:
A Patch is available in ticket #16697 and in the attachments below too.
Changes are minimal:
--- xc/lib/font/fontfile/decompress.c.origin`` ``2008-09-29 22:08:09.000000000 +0200
+++ xc/lib/font/fontfile/decompress.c`` ``2008-09-29 22:06:41.000000000 +0200
@@ -77,7 +77,7 @@
#include "fontmisc.h"
#include <bufio.h>
-#ifdef __UNIXOS2__
+#if defined(__UNIXOS2__) || defined(__DARWIN__)
#include <sys/types.h>
#endif
Cannot establish any listening sockets
Problem: It fails because missing network support:
Solution:
It looks like your system doesn’t have a working network.
The workaround is simply to add -nolisten tcp. This means that XFree86 will not listen on TCP port 6000.
Missing keymap
Problem:
The keymap appears mandatory (no default one embedded, but it looks for USA.keymapping by default).
Also, the option -nokeymap is still present and working, it makes X to attempt to read keymap from the system but it will fail with a fatal “Could not build a valid keymap”.
Solution:
** **
If you plan to use an alternative keymap without specifying it at the command line, you can use a symbolic link:
mv /System/Library/Keyboards/USA.keymapping /System/Library/Keyboards/US.keymapping
ln -fs /System/Library/Keyboards/Francais.keymapping /System/Library/Keyboards/USA.keymapping
Please let us know if you know how to generate a .keymapping file.
Font-related problem when launching xterm
**Problem:**
XFree86 Version 4.7.0 / X Window System
(protocol Version 11, revision 0)
Release Date: 12 August 2007
``If the server is older than 6-12 months, or if your hardware is
``newer than the above date, look for a newer version before
``reporting problems. (See http://www.XFree86.Org/FAQ)
Operating System: Darwin Apple Computer, Inc.
Using keymapping provided in /USA.keymapping.
Display mode: IOKit
Couldn't set hardware cursor visible with kernel return 0xe00002c7.
Screen 0 added: 800x600 @ (0,0)
Could not init font path element /usr/X11R6/lib/X11/fonts/CID/, removing from list!
Fontconfig error: Cannot load default config file
Warning: Cannot convert string "" to type XftFont
waiting for X server to shut down Quitting XDarwin...
X connection to :0.0 broken (explicit kill or server shutdown).
Create font information cache files:
/usr/X11R6/bin/fc-cache -v -f /usr/X11R6/lib/X11/fonts/
Fontconfig error: Cannot load default config file /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts/”: caching, 0 fonts, 11 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//100dpi”: caching, 398 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//75dpi”: caching, 398 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//CID”: caching, 0 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//Speedo”: caching, 0 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//TTF”: caching, 22 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//Type1”: caching, 29 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//cyrillic”: caching, 0 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//encodings”: caching, 0 fonts, 1 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//encodings/large”: caching, 0 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//local”: caching, 0 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//misc”: caching, 55 fonts, 0 dirs /usr/X11R6/bin/fc-cache: “/usr/X11R6/lib/X11/fonts//util”: caching, 0 fonts, 0 dirs /usr/X11R6/bin/fc-cache: succeeded
Note: It seems optional.
Failed to connect to the HID system
Problem: Attempting to use width x height = 800 x 600
XFree86 Version 4.7.0 / X Window System
(protocol Version 11, revision 0)
Release Date: 12 August 2007
If the server is older than 6-12 months, or if your hardware is
newer than the above date, look for a newer version before
reporting problems. (See http://www.XFree86.Org/FAQ)
Operating System: Darwin Apple Computer, Inc.
Using keymapping provided in USA.keymapping.
Display mode: IOKit
Couldn't set hardware cursor visible with kernel return 0xe00002c7.
Screen 0 added: 800x600 @ (0,0)
Could not init font path element /usr/X11R6/lib/X11/fonts/CID/, removing from list!
Using keymapping provided in USA.keymapping.
Display mode: IOKit
Failed to connect to the HID System as the window server!
Fatal server error:
Make sure you have quit the Mac OS X window server.
OsVendorFatalError
AbortDDX
Quitting XDarwin...
Although the default xterm fails, xterm and aterm compiled from MacPorts (and probably Eterm too) don’t.
Many “window managers” are linked with ApplicationServices framework*, *directly or through their library dependencies, so they won’t run.
No screens found
No screens found
Solution: On VMware, ensure that VMwareIOFramebuffer.kext is loaded.
assert failed on line 416 of xfIOKit.c!
Problem: A blue frozen screen and the message “assert failed on line 416 of xfIOKit.c!” in the (redirected) &2
Solution: Unknown, please let us know.
To be continued…
Resources
http://www.xfree86.org/current/Darwin.html (old) http://xonx.sourceforge.net/ http://www.xdarwin.org/keymappings/ mirror http://www.mit.edu/afs/sipb/project/darwin/src/modules/keymaps/keymappings/ http://www.xfree86.org/current/Darwin.pdf
XNU, the kernel
Please note: This page has not been updated to take changes made in Darwin 10, or later into account.
This page is about the XNU kernel.
Both Apple vanilla mach_kernel and Voodoo xnu-dev are available and functional in PureDarwin.
It is a work in progress. Please contribute.
What is XNU
XNU is the kernel used by Darwin and Mac OS X (similar to what GNU/Linux kernel is in a Linux distro). XNU acronym stands for “X is Not Unix” (although Mac OS X has been Unix certified in 2007).
Common myths about XNU
(please add some text)
- Not a microkernel (although using parts of the Mach microkernel)
- Not 64-bit (although able to run 64-bit binaries)
- Not so hard to recompile See here why the term kernel is used somewhat differently than you might expect.
Common parts of XNU
- Mach 3.0
- BSD
- I/O Kit
Creating a prelinked mach_kernel
XNU cannot boot by itself, since it always needs a certain set of kernel extensions (kexts) to be present. However, you can create a mach_kernel file that not only contains XNU itself, but also a defined set of kexts:
kextcache -a i386 -K /Volumes/PureDarwin/mach_kernel -c /tmp/mach_kernel.prelinked /Volumes/PureDarwin/System/Library/Extensions
The result is that you should have a file in /tmp/mach_kernel_prelinked that contains both XNU and the kexts.
Another example, fast boot and kext autoloaded:
kextcache -a i386 -s -l -n -c "$MOUNT/System/Library/Caches/com.apple.kernelcaches/kernelcache.DEADBEEF" -k -K "$MOUNT/mach_kernel" -m "$MOUNT/System/Library/Extensions.mkext" "$MOUNT/System/Library/Extensions"
Resources
- http://en.wikipedia.org/wiki/XNU
- http://osxbook.com/book/bonus/ancient/whatismacosx/arch_xnu.html
- http://code.google.com/p/xnu-dev/
ZFS
MacZFS.org
Enthusiasts of ZFS and of PureDarwin will want to read the whole web site from the beginning, for an idea of what’s to come from the alliance of these two communities and their technologies. PureDarwin users will require manual installation for now, in order to upgrade to the latest stable release of MacZFS. From there, all other MacZFS.org documentation is generally relevant. All development of ZFS on Mac OS takes place at MacZFS.org. They host packages for Mac OS, and that can be manually installed upon PureDarwin.
The ZFS implementation that runs on Mac OS X (and Darwin) can be downloaded or compiled.
Fyi, ZFS is pure. Parts of ZFS
On Mac OS X (and Darwin), ZFS consists of the following parts:
A filesystem,* /System/Library/Filesystems/*zfs.fs Contained therein is, among other things, a command-line tool called zfs.util
Command-line tools in /usr/sbin,
- zpool (configures ZFS storage pools)
- zfs (configures ZFS file systems)
- zoink (misc)
- zfs.util (ZFS file system utility) A settings file, /etc/zfs/zpool.cache (a cache that describes active ZFS pools on the system) The device /dev/zfs, this is created automatically when zfs.kext gets loaded (which happens whenever you call the zfs command-line tool, for example).
Filesystem kext
As mentioned above, zfs.kext is not a regular kernel extension but instead is a filesystem kext. Among other things, this means that it is not loaded at boot time, but is loaded automatically on demand through kextload. Unfortunately, documentation on filesystem kexts is hard to find.
Performance, Integrity and Stability
Sun (and the FreeBSD project) recommend that at least 512MB of RAM is available, to ensure that ZFS performs reliably, although it will work on systems with less than 512MB with suboptimal performance. ZFS was designed to perform best on 64-bit systems, although it works on 32-bit systems.
Building ZFS
This section will be updated, pending the official integration of MacZFS into PureDarwin. The old instructions are provided for reference in the hope that you will help to update it.
Our favorite way is through darwinbuild via a custom plist containing the paste below. You will notice that only two architectures have been specified, because it does not yet build on 64bits arch (ppc64 or x86_64). `darwinbuild zfs’ is pretty straight forward.
zfs = {
configuration = "Leopard_Release";
dependencies = {
lib = (
Libsystem,
dyld,
libgcc,
ncurses,
);
};
environment = {
"RC_ARCHS" = "i386 ppc";
};
"source_sites" = (
"http://puredarwin.googlecode.com/hg/Mirror/",
"http://puredarwin.googlecode.com/svn/Mirror/",
);
version = "119";
};
Resources
http://en.wikipedia.org/wiki/ZFS http://opensolaris.org/os/community/zfs/
http://groups.google.com/group/zfs-macos http://maczfs.org/ Sun Solaris ZFS Administration Guide Getting Started Guide for MacZFS MacZFS FAQ MacZFS mailing list
For users
This page contains information for users.
1. General information for users
1.1 Installation ISOs
-
Darwin 10 For versions up to Darwin10 (e.g.: the one included in Snow Leopard), the PureDarwin project is working on building it.
-
Darwin 9 For versions from Darwin 9 (the version that matches Leopard) onwards, the PureDarwin project is providing ISOs and a way to code, build and use it. Currently, there is a minimal Darwin 9 ISO (“PureDarwin Nano”, can boot into bash) and a Developer Preview with X11 (“PureDarwin Xmas”, can boot into a X11 desktop).
If you are a developer, you can create your own full PureDarwin 9 ISOs and virtual machines with our scripts and tools as described here.
1.2 Other
Historic OpenDarwin 6 ISOs at http://www.mit.edu/~darwin/downloads/
1.3 Documentation
This wiki is a place for users and developers alike to document and discuss Darwin.
2. Prerequisites
This list does not consider the PowerPC platform since no PowerPC hardware is available in the marketplace any more to our knowledge, other than used vintage Macs (which already come with Mac OS X).
2.1 Darwin 8
Note that the PureDarwin project is not about running Darwin 8 and earlier and we will not support it in any way.
2.2 Darwin 9
- For PureDarwin Xmas: VMware Fusion 2 running on a Macintosh
- A “family 6” Intel processor, which includes (but is not limited to)
- Core Solo and Core Duo (“Yonah”)
- Core 2 Duo and Core 2 Quad (“Merom”, “Penryn”, “Conroe”, “Allendale”, “Wolfdale”, “Kentsfield”, “Yorkfield”)
- Celeron S 4x0 (“Conroe-L”)
- Celeron E1x00 (“Conroe-L”)
- Pentium Dual-Core T2xx0, E2xx0 (“Yonah-1024”, “Merom-1024”, “Allendale-1024”)
- Atom 2x0 (“Diamondville”)
For best compatibility, use an Intel chipset (ICHx). These requirements might be lifted by the use of the xnu-dev kernel.
3 Tested Compatible Hardware
3.1 Virtual
Pseudo-legend:
Host
*Soft version x.y.z (+ info(s))
- cpu + info(s)
Apple Mac OS X (Snow) Leopard QEMU > v0.9.0
- Intel Core 2 Duo (T7400) VMware Fusion
- Intel Core 2 Duo (T7400) MS Windows QEMU v0.10.0 (XP 32 bits SP3)
- AMD Sempron 2800+ (specific version from “Patrick”, see QEMU page) VMware Server 2.0 nc (AMD 64bits) VMware Player 2.5.1 (XP 32 bits SP3) VMware Player 2.5.2 (WIN7 64bits RC)
- Intel Core 2 Quad (Q9400) GNU/Linux
kvm (Ubuntu 8.10)
- AMD Phenom(tm) II X4 940 Processor VMware Player 2.5 (Ubuntu, Fedora 8, OpenSuse 64 bits) VMware Server 2.0.0 (SMP x86_64) via VMware Infrastructure Web Access
- Dual Core AMD Opteron(tm) Processor 180 (Sun Fire(TM) X2100)
3.2 Physical
- Apple MacBook2,1 (Intel Core 2 Duo 2.16Ghz)
- Apple MacBookPro3,1
- ? ich7m, T7200, 945pm
- IBM T42
- Lenovo S10 (no Ethernet yet)
- Netbook nc10
- Acer Aspire 5610Z (Intel T2060 1.6Ghz)
- MSI Wind U100 (no XFree86 yet)
4. Installing PureDarwin
Don’t get too excited: we haven’t put together a full “How to” yet. This page will provide a selection of pointers.
4.1 Installing PureDarwin using GRUB and CHAMELEON
The process for installing PureDarwin to boot using the GRUB and CHAMELEON bootloaders (perhaps as part of a multi-boot system) is described below. Thanks to poppyer for the information.
The basic booting procedure is:
GRUB(MBR) -> CHAMELEON boot1h -> CHAMELEON boot2 -> darwin kernel
First of all, preparing a primary partition as hfs partition NOTE: I only tried these on a primary partition, so I am not sure whether it works for logical extended partitions
-
make an hfs partition and mount it
- FOR LINUX: using
mkfs.hfs - FOR OSX: using the
Disk Utils.app
- FOR LINUX: using
-
loop mount the puredarwin image (iso or vmdk)
- loop mount a vmdk might be tricky under linux.
-
copy everything from the puredarwin image to your hfs partition in order to preverse file ownerships etc.
- FOR LINUX: using
sudo cp -a - FOR OSX: using
sudo cp -pR
- FOR LINUX: using
So far, the hfs partition is ready, now going to install the boot loader
-
Download an extract the Chameleon Boot Loader to any folder. Copy the
bootfile (often calledboot2) to the root of your hfs partition. -
Unmount your HFS partition (VERY IMPORTANT)
ddtheboot1hfile (1024 bytes) from chameleon to the bootsector of your hfs partition.
By here, the hfs partition is self bootable, now add it to your first level boot loader (GRUB)
-
add and item to the menu.lst of your GRUB (MBR), usually:
rootnotify (hd?,?) makeactive chainloader +1
Last, if your CPU is SSE2 only, you MUST use the voodoo kernel
BEFORE your reboot, edit the
/Library/Preferences/SystemConfiguration/com.apple.Boot.plist,
add ".voodoo" to "mach_kernel", so it becomes "mach_kernel.voodoo"
mach_kernel.voodoois already shipped with puredarwin.Xmas butmach_kernel.voodoouses its ownSystem.kext,
Troubleshooting
Q: if your first reboot freeze at: "MAC Framework successfully initialized using ...."
A: you might need a patched version of AppleACPIPlatform.kext and AppleAPIC.kext from boot132 generic.iso to replace those ones under /Systerm/Library/Extensions/
4.2 Preparing a Disk Using Darwin Tools
You will need:
- The Chameleon boot loader, installed into /usr/standalone/i386/
fdisk(a version comes with Chameleon, so use that one)dd,newfs_hfsandmount.
Then, assuming that you’re working with the first disk (0),
- Create a partition and install the primary bootloader:
fdisk -i -a hfs /dev/rdisk0 - Create an HFS+ file system on the disk:
newfs_hfs -s -J -v /dev/rdisk0 - Install the secondary bootloader:
dd if=/usr/standalone/i386/boot1h of=/dev/rdisk0s1 - Mount the partition:
mount -t hfs /dev/rdisk0s1 /tmp - Install the tertiary bootloader:
cp /usr/standalone/i386/boot /tmp/ - Install the kernel and everything else onto the system
Simple, eh? A version of the PureDarwin Nano CD image with these tools installed will be available soon.
Apache
Apache is the most popular HTTP server software in use. It can be installed on PureDarwin, e.g., from the MacPorts project.
Installing apache
Apache can be installed as apache2 port from MacPorts.
Configuring apache
The configuration files can be found in /opt/local/apache2/conf if you have installed the apache2 package from MacPorts.
To load apache2 on every boot, run sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist.
Announcing apache in the local network
Running
dns-sd -R . _http._tcp. . 80 should announce the web server in the local network via Bonjour.
The service then appears in the Safari Bonjour bookmarks folder. Using a ‘.’ as the service name is equivalent to no service name, telling mDNS to use the computer name. However, this appears not to work properly, since the announced domain name has the “.local.” suffix which Apache apparently does not recognize?
To be continued.
Armoring PureDarwin
This page describes some ways to hardening PureDarwin (and intrinsically Darwin 9). Please feel free to contribute.
Preamble
“Know your enemy” - Rage Against the Machine
Dictionary
hard • en |ˈhärdn|
verb make or become hard or harder : [ intrans. ] wait for the glue to harden | [ trans. ]_ bricks that seem to have been hardened by firing_.
- make or become more severe and less sympathetic : [ trans. ] she hardened her heart.
- make or become tougher and more clearly defined : [ intrans. ] suspicion hardened into certainty.
- [ intrans. ] (of prices of stocks, commodities, etc.) rise and remain steady at a higher level.
Disclaimer
** **
See above, you have been warned in red. Also, take a look at Legal page.
Before installation
Usage
Assuming PureDarwin will be installed on /Volume/Puredarwin, these two variables below could be used in the following information.
export VOLUME="/Volume/PureDarwin"
export DISK=/bin/df | /usr/bin/grep “^/Volume/PureDarwin” | awk -F ’ ’ ‘{print $1}’``
You can also use setenv, according to your favorite shell. Note that the ownership of the session is root.
Command-line tools to securely erase
diskutil
Securely erase a disk on $DISK
diskutil secureErase <level> $DISK
Securely erase freespace of a disk on $DISK
diskutil secureErase freespace <level> $DISK
3 levels are available in man diskutil:
- Single pass randomly erase the disk
- US DoD 7 pass secure erase
- Gutmann algorithm 35 pass secure erase
rm
rm' with -P` option will overwrite file(s) 3 times, first with the byte pattern 0xff, then 0x00 and finally 0xff before deleting them.
srm
Securely remove files or directories:
srm -r -m dir
Same as above, 3 levels available in `man srm’:
-s overwrites with a single pass of random data
If neither is specified, the 35-pass Gutmann algorithm is used
Misc
Slim down pd_roots & pd_drivers list
Probability says pd_roots & pd_drivers may include unused packages with potential vulnerabilities.
By default, the list is big, too big:
cat pd_roots pd_drivers | wc -l
183
Knowing what you’re doing, you can safely remove more than hundred packages.
hdiutil compression
hdiutil uses the DiskImages framework (FileVault encryption is supported) to manipulate disk images.
If you want to compress a folder:
hdiutil create -srcfolder "<folder>" -format UDBZ <compressed folder>.dmg
srm -r <folder>
In order to mount it later, it can be attached using hdiutil:
mkdir <folder>
hdiutil attach -mountpoint <compressed folder>.dmg
System startup
Extensible Firmware Interface (EFI)
EFI determines which partition or disk to load. It also determines whether the user can enter (or not) in singe-user mode. More information in efiboot, boot and the boot process pages.
Creating an EFI password disables:
- the single-user mode
- loading of unapproved partition or disk
- target disk mode at startup
BIOS
“Cliché”, assign a BIOS password in order to prevent potential way to access the OS by booting alternative media.
Fortify single-user mode
Altering rc.common (caution)
if [ "${BootType}" = "singleuser" ];then
authentification.sh
fi
Assuming authentification.sh is a “nice” script.
Using the deprecated /etc/passwd
According to the file itself, in the first comments:
# Note that this file is consulted directly only when the system is running
# in single-user mode. At other times this information is provided by
# Open Directory.
Try to change the shell PATH from:
root:*:0:0:System Administrator:/var/root:/bin/sh
to:
root:*:0:0:System Administrator:/var/root:/dev/null
Remove single user mode support from XNU
If you remove/disable the code portion of what activate/detect the single user mode (-s), there is no way to enter in single user mode. A patch is needed in this case (****.
Encrypt around
FIXME
Configuring Access Warnings
FIXME
PKI
PKI
System
Processus & memory
Keep in mind, that any binary you would like to run, can have already been compromised or can be compromised at run-time. A possible approach is to use your own trusted binary from a read-only medium (when possible), taking in account how your binary is loaded and run in memory. As an illustrative example, `netstat’ is well known to be easily short-circuited in order to not show some connections (and several ways exist..).
Oldschool UNIX utility
There are plenty “oldschool” UNIX utility, for historical causes, posterity purpose or simply because there are still usefull, as some of them:
- kill, killall, netstat, ps, sysctl, top, uptime, w, who, … We can also find specific utility to Darwin, or at least to BSD subsystems also detailled below.
sysctl
Retrieving memory status is easy:
sysctl -a | grep mem
hw.physmem = 2147483648
hw.usermem = 1810808832
hw.memsize = 2147483648
hw.memsize: 2147483648
A more human readable result of the swap usage:
sysctl -a | grep swap
vm.swapusage: total = 1024.00M used = 416.94M free = 607.06M
hostinfo
Mach kernel version:
Darwin Kernel Version 9.1.0: Wed Oct 31 17:46:22 PDT 2007; root:xnu-1228.0.2~1/RELEASE_I386
Kernel configured for up to 2 processors.
2 processors are physically available.
2 processors are logically available.
Processor type: i486 (Intel 80486)Processors active: 0 1
Primary memory available: 1.00 gigabytes
Default processor set: 52 tasks, 211 threads, 2 processors
Load average: 0.02, Mach factor: 1.96
Mach virtual memory statistics: vm_stat
Rudimentary command, an (different) alternative of the missing `free’ UNIX utility.
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free: 19385.
Pages active: 131831.
Pages inactive: 51339.
Pages wired down: 58216.
"Translation faults": 6266580.
Pages copy-on-write: 161179.
Pages zero filled: 3302531.
Pages reactivated: 5342.
Pageins: 167299.
Pageouts: 3430.
Object cache: 24703 hits of 77103 lookups (32% hit rate)
Some particular value needs to be watch, as the Pageouts number values. If it goes more than 0, it simply means that your memory is swapping which is not what you want, most of the time. Swapping can result in potential sensitive information dumped from memory to the harddisk (in the swapfile(s)). Swapping can also happen simply because not enough memory is available.
Moving swap file
FIXME
Manipulate power management settings with pmset
According to the man, pmset changes and reads power management settings such as idle sleep timing, wake on administrative access, automatic restart on power loss, etc.
Changes are saved in a persistent plist file at /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist
Scheduled power on/off events are stored separately in /Library/Preferences/SystemConfiguration/com.apple.AutoWake.plist
From the man:
boot - tell the kernel that system boot is complete (normally LoginWindow does this). May be useful to Darwin users.
FIXME
Disable computer sleep
pmset -a sleep 0
0 to set the idle time to never
Enable hard disk sleep (disk spindown timer)
pmset -a disksleep 1
Disable wake on ethernet magic packet
pmset -a womp 0
Disable automatic restart on power loss
pmset -a autorestart 0
Disable computer sleep when power button is pressed
pmset -a powerbutton 0
Permissions and filesystem
POSIX restrictive style
Use restrictive file mode as possible. Avoid file readable by anyone and writable (typically a 644) by the owner only.
chmod 600 *
Idem for folders.
sudo chmod 700 /Users/<username>
Change global umask file permission
Persistent effects. (FIXME NOT TESTED)
sudo defaults write /Library/Preferences/.GlobalPreferences NSUmask 77
You can also use non persistent umask command illustrated by the example just below.
aladin@niwarderup:~/test% touch before_umask
aladin@niwarderup:~/test% mkdir before_umask_dir
aladin@niwarderup:~/test% umask 77
aladin@niwarderup:~/test% touch after_umask
aladin@niwarderup:~/test% mkdir after_umask_dir
aladin@niwarderup:~/test% ls -l
total 0
-rw-r--r-- 1 aladin staff 0 Jun 20 19:07 before_umask
drwxr-xr-x 2 aladin staff 68 Jun 20 19:07 before_umask_dir
-rw------- 1 aladin staff 0 Jun 20 19:07 after_umask
drwx------ 2 aladin staff 68 Jun 20 19:07 after_umask_dir
Extended Attributes
Extended attributes extend the basic attributes associated with files and directories in the file system. They are stored as name:data pairs associated with file system objects (files, directories, symlinks, etc). xattr
ls -@l <file>
FIXME
Locking file with chflags
Set the user immutable flag (owner or super-user only):
chflags uchg filename.txt
Unlocking file with chflags
Clear the user immutable flag (owner or super-user only):
chflags nouchg filename.txt
The suid/sgid (set-user/group-ID-on-execution) bit
Executable files with this bit set will run with effective uid set to the uid of the file owner. Moreover, directories with the set-user-id bit set will force all files and sub-directories created in them to be owned by the directory owner and not by the uid of the creating process.
find / -type f -perm -04001 -ls > suid-files
find / -type f -perm -02001 -ls > sgid-files
find / -type f -perm -04001 -user 0 -ls > suid-root
find / -type f -perm -02001 -group 0 -ls > sgid-root
whoami
aladin
id
uid=501(aladin) gid=20(staff) groups=20(staff),98(_lpadmin),80(admin)
osascript -e "tell app "ARDAgent" to do shell script "whoami""
root
osascript -e "tell app "ARDAgent" to do shell script "id""
uid=0(root) gid=0(wheel) egid=20(staff) groups=0(wheel),1(daemon),2(kmem),8(procview),29(certusers),3(sys),9(procmod),4(tty),5(operator),80(admin),20(staff)
Find writable file(s)
find / -type f -perm -02 -ls
Find writable dir(s)
find / -type d -perm -02 -ls
Kext permission rules
- All files and folders in the KEXT, including the KEXT itself, must be owned by the root user (uid 0)
- All files and folders in the KEXT, including the KEXT itself, must be owned by the wheel group (gid 0)
- All folders in the KEXT, including the KEXT itself, must have the permissions 0755 (octal)
- All files in the KEXT must have permissions 0644 (octal)
- A KEXT is not the place to store a user-space executable.
/usr/sbin/chown -R root:wheel MyKEXT.kext
find MyKEXT.kext -type d -exec /bin/chmod 0755 {} ;
find MyKEXT.kext -type f -exec /bin/chmod 0644 {} ;
Hard link
fixme
Symbolic link
fixme
diskutil
Verify and repair permission
When you use diskutil to verify or repair disk permissions, it reads the Bill of Materials files from the Darwin installation and compares its list to the permissions on each file listed.
If the permissions differ, diskutil can repair them.
diskutil repairPermissions $PUREDARWIN
Enable journaling (if supported by the FS)
diskutil enableJournal $PUREDARWIN/
Encrypting data
System swap
The kernel uses a pool of external swap files to support demand paging. Caution, it seems swap files aren’t erased securely at startup. Swap files reside in /private/var/vm/ directory:
-rw——T 1 root wheel 67108864 Jun 22 11:51 swapfile0
-rw------T 1 root wheel 67108864 Jun 22 19:02 swapfile1
An external storage manager for dynamic pager is running as root, showing by ps aux | grep dynamic
root 26 0.0 0.1 75376 704 ?? Ss 11:50AM 0:00.01 /sbin/dynamic_pager -F /private/var/vm/swapfile
Launched with /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
Disable swap file (caution)
Disabling swap needs caution.
Some program may require explicitly swap memory area. What happens if no more physical memory available and swap is disabled?
Non persistent way:
sudo killall dynamic_pager
sudo srm /private/var/vm/swapfile*
Persistent way:
Edit /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist and remove the nodes:
<string>/sbin/dynamic_pager</string>
<string>-F</string>
<string>/private/var/vm/swapfile</string>
Alternatively, the Disabled <boolean> optional key is used to disable (or not) the job.
Then wipe free space.
Encrypted swap file
This is essentially used to prevent some potential local user “deviance”.
PureDarwin, if it is not yet the case, will provide by default an encrypted swap partition. The `dynamic_pager’ daemon have an option to enable encryption:
-E Encrypt the data in the swap files.
Not sure if it is still working but.. try to put ENCRYPTSWAP=-YES- in /etc/hostconfig or add the the respective launchd plist the corresponding arg.
-P This option is currently unimplemented.
Although in the short getopt:
dynamic_pager: illegal option -- h
usage: dynamic_pager [-F filename] [-L low water alert trigger] [-H high water alert trigger] [-S file size] [-P priority]
Encrypt (and password protect) a folder with hdiutil
hdiutil create -encryption AES-256 -stdinpass -srcfolder <folder> <encrypted folder>.dmg
Decrypt a folder with hdiutil
hdiutil attach -stdinpass <encrypted folder>.dmg
FileVault
256-bit and 128-bit AES keys support.
Bad, filevault key are protected by user/password. FIXME
gpg
FIXME
Users & accounts
Creating user account
Some scripts as pd_adduser' or pd_injectuser’, or the more regular dscl' and passwd’ binaries can be used in order to create and manage user accounts. See Download page and User management page.
Reset a user’s password in single user mode
Boot into single user mode. Replace username with the targeted user and password with the desired password, then:
fsck -fy mount -uw / launchctl load /System/Library/LaunchDaemons/com.apple.DirectoryServices.plist dscl . -passwd /Users/username [password]
Then reboot, or relaunch DirectoryServices.
Note that you can also use pd_injectuser to recreate a user account, including his password.
/usr/local/sbin/pd_injectuser
Disable root account
dsenableroot -d -u username -p userpassword
Enable root account (caution)
dsenableroot -u username -p userpassword -r rootpassword
Restrict sudo use
Edit /etc/sudoers and limit the use of sudo to a single command per auth by adding:
Defaults timestamp_timeout=0
Edit /etc/sudoers in order to restrict who can run sudo by removing:
%admin ALL=(ALL) ALL
and add for each <user>:
<user> ALL=(ALL) ALL
ACL
Enable file ACL on the root file system
sudo fsaclctl –p / -e
Disable file ACL on the root file system
sudo fsaclctl –p / -d
Enable user based ACL for a file
Read access:
chmod +a "<user> allow read" <file>
Enable group based ACL for a file
Allow write access:
chmod +a "<group> allow write" <file>
Deny write access specifically:
chmod +a "<user> deny write" <file>
View ACLs
ls -le <file>
sandbox: a role-based access control system
FIXME A kernel-enforced access control, applied at the system call of XNU. Flexible policies?
Compiled from Scheme (LISP inside ;)) programs/rules in /usr/share/sandbox. Rules support from SYSV IPC to BSD sysctl via signals. FIXME
Logging
Cron audit
Look /etc/periodic/* FIXME
syslogd
Edit /etc/syslog.conf.
To log authentication error messages (also the remote ones) in /var/log/secure.log, change the line
authpriv.*;remoteauth.crit /var/log/secure.log
to
authpriv.*;remoteauth.err;auth.err /var/log/secure.log
Limit number of message a syslogd rule generate
Enable facility of LOG_SECURITY:
/usr/sbin/sysctl -w net.inet.ip.fw.verbose=1
Add logamount <number> after the log keyword
Setting <number> to 0 removes limit.
local system logging
FIXME /etc/newsyslog.conf configuration can sets
- log file rotation based on size, last rotation time, or time of day
- secure permissions to log files at rotation time
remote system logging
Local logging is not really reliable if the computer is compromised, local files can be modified, removed or short-circuited
Open /etc/syslog.conf to enable remote logging. Add to the top:
*.* @<remote log server address or host>
Restart `syslogd’ with a hangup signal (or via launchctl):
sudo killall –HUP syslogd
Edit /etc/syslog.conf and add /var/log/secure.log and /var/system.log to the host <host>:
authpriv.*;remoteauth.err;auth.err @<host>
*.notice;authpriv,remoteauth,ftp,install.none;kern.debug;mail.crit @<host>
FIXME
Process accounting
FIXME Logs all commands executed by all users.
To enable process accounting, create /var/account folder.
sudo mkdir -p /var/account
Create /var/account/acct to store process accounting information:
sudo touch /var/account/acct
chown -R root:admin /var/account
chmod -R 660 /var/account
Start accounting on the system:
sudo accton /var/account /acct
It is launched at boot.
Use lastcommto get information on previously executed commands.
Enable security audit
FIXME Open /etc/hostconfig and add:
AUDIT=-YES-
Restart.
audit -n rotates the current log file.
audit -s rotates the current log file and forces to reload settings from the audit_control file
last, wtmp & utmp
The file /var/run/utmp stores information about the currently logged-in user, whereas /var/log/wtmp tracks all user logins/logouts, shutdowns, reboots, and crashes. Deprecated but sometimes usefull.
Log files (non exhaustive list)
FIXME /var/log/cups /var/log/ftp.log /var/log/httpd /var/log/lastlog /var/log/wtmp /var/log/lookupd.log /var/log/lpr.log /var/log/secure.log /var/log/system.log /var/log/ipfw.log /var/log/fsck_hfs.log
/var/run/utmp
Library/Logs/
Debugging
Some tools
FIXME
leak
FIXME Leaked memory identification and other unreferenced malloc buffers.
heap
FIXME List all the malloc-allocated buffers in the process’s heap.
malloc_history
FIXME malloc_history inspects a given process and lists the malloc allocations performed by it.
vmmap
FIXME
Disable Core Dumps
FIXME To prevent the kernel from creating core dumps:
kern.coredump=0 in /etc/sysctl.conf
The non persistent way:
sysctl -w kern.coredump=0
Limit core dump
Enable core dumps by adding the line limit core unlimited in /etc/launchd.conf (persistent way).
The resulted dump(s) will be stored in /cores folder:
file /cores/core.57
/cores/core.57: Mach-O core i386
Or from a shell (non persistent): ulimit -c unlimited
Notes: kill -ABRT <pid> could be used in order to generate a core dump.
On Darwin8, change the line “COREDUMPS=-NO-” in /etc/hostconfig to “COREDUMPS=-YES-”
launchd
FIXME To send all launchd logs to a file, add in /etc/syslog.conf:
launchd.* /var/log/launchd.log
Restart syslogd:
sudo kill -HUP cat /var/run/syslog.pid``
To increase the level of debugging:
sudo launchctl log level debug Password: ********
FIXME See launchd page.
Enable lookupd debugging
sudo dscl . create /dsRecTypeStandard:Config/lookupd Debug YES
sudo dscl . create /dsRecTypeStandard:Config/lookupd Trace YES
Edit /etc/syslog.conf and replace netinfo.err by netinfo.debug
Restart daemons
sudo kill -HUP cat /var/run/syslog.pid `sudo kill -HUP `cat /var/run/lookupd.pid
Disable lookupd debugging
sudo dscl . delete /dsRecTypeStandard:Config/lookupd
Edit /etc/syslog.conf and replace netinfo.debug with netinfo.err
Restart daemons
sudo kill -HUP cat /var/run/syslog.pid``
sudo kill -HUP cat /var/run/lookupd.pid`
diskarbitrationd
FIXME Open /System/Library/LaunchDaemons/com.apple.diskarbitrationd.plist:
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/diskarbitrationd</string>
</array>
and simply append “-d”:
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/diskarbitrationd -d</string>
</array>
FIXME
fs_usage
fs_usage reports system calls and page faults related to filesystem activity in real-time, often usefull for debugging.
Remember by default (without any options), fs_usage itself, Terminal, telnetd, sshd, rlogind, tcsh, csh and sh processes are excluded from the output.
Identify files used by an application at launchtime:
sudo fs_usage -w | grep <application>
-w options forces wider, detailed, output.
FIXME
DTrace
The generic front-end to the DTrace facility is a powerfull dynamic debugger and analysis tool. See the DTrace page.
Recompiling XNU
FIXME See The XNU kernel page.
Usefull MacPorts
kernel-tools sysutils/kernel-tools 8J2135 Tools required to build xnu for Intel gcc_select sysutils/gcc_select 0.1 Switch the default compiler After kernel-tools installed, the compilation will fail irremediably with some tool not found in /usr/local/bin/.
A quick fix with symbolic links:
/usr/local/bin/check_dylib->/opt/local/bin/check_dylib
/usr/local/bin/checksyms->/opt/local/bin/checksyms
/usr/local/bin/cmpshlib->/opt/local/bin/cmpshlib
/usr/local/bin/decomment->/opt/local/bin/decomment
/usr/local/bin/hack_libgcc->/opt/local/bin/hack_libgcc
/usr/local/bin/indr->/opt/local/bin/indr
/usr/local/bin/kern_tool->/opt/local/bin/kern_tool
/usr/local/bin/kextsymboltool->/opt/local/bin/kextsymboltool
/usr/local/bin/mkshlib->/opt/local/bin/mkshlib
/usr/local/bin/seg_addr_table->/opt/local/bin/seg_addr_table
/usr/local/bin/seg_hack->/opt/local/bin/seg_hack
/usr/local/bin/relpath->/opt/local/bin/relpath
Configuration files involved
FIXME
bsd/conf/MASTER iokit/conf/MASTER.i386 libsa/conf/MASTER osfmk/conf/MASTER.i386 security/conf/MASTER
bsd/conf/MASTER.i386 libkern/conf/MASTER libsa/conf/MASTER.i386 pexpert/conf/MASTER security/conf/MASTER.i386
iokit/conf/MASTER libkern/conf/MASTER.i386 osfmk/conf/MASTER pexpert/conf/MASTER.i386
Note we don’t use MASTER.ppc files although they are still existing.
Before
FIXME ProductName: Mac OS X ProductVersion: 10.5.4 BuildVersion: 9E17
gcc version:
Using built-in specs.
Target: i686-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5465~16/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 --target=i686-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5465)
Easy compilation
FIXME make KERNEL_CONFIGS=“RELEASE” all VERBOSE=YES FIXME
After
FIXME
Tweaking XNU
Secure levels “Ã la OpenBSD”
This is not yet implemented nor investigated. Some security concepts “Ã la OpenBSD” could be reused into Darwin, at least partially.
In OpenBSD, there are four security levels, from the less to the most secure level: -1, 0, 1, 2
In OpenBSD, securelevels are set from /etc/rc.securelevel In PureDarwin, **nyi. **securelevels are set from [unknown location/securelevel.plist]
In OpenBSD, the end of the boot process is showing which security level is used. In PureDarwin, nyi.
In OpenBSD, sysctl kern.securelevel=x can be used to adjust “on live” the security level. In order to adjust from a higher security level to a lower security level, a reboot is needed.
In PureDarwin, `sysctl’ is reporting the option (but not yet tested)
kern.securelevel = 0
kern.securelevel: 0
kern.secure_kernel: 0
In OpenBSD, securelevel -1: no additional kernel security features, nor restrictive permission. Not for production use.
In OpenBSD, securelevel 0: used at first boot. If securelevel 1 is set, it will be used after the boot process finish. There are no added features of securelevel 0. In PureDarwin, ?
In OpenBSD, securelevel 1: /dev/mem and /dev/kmem cannot be write. Raw disk are read-only. etc…
In OpenBSD, securelevel 2: …
Removing debug info
FIXME. Take care of MACH_DEBUG. According to osfmk/conf/MASTER configuration file:
# MACH_DEBUG enables the mach_debug_server, a message interface used to
# retrieve or control various statistics. This interface may expose data
# structures that would not normally be allowed outside the kernel, and
# MUST NOT be enabled on a released configuration. options MACH_DEBUG # #
options MACH_IPC_DEBUG # #
#
options MACH_VM_DEBUG # # <debug>
FIXME
authorization right
FIXME /etc/authorization
Network
Disable IPv6
networksetup -setv6off $iface
ifconfig
Use a restrictive netmask.
Detecting promiscuous mode
Several ways exist to detect promiscuous mode (potential running sniffer), you can use DTrace, simply parse `ifconfig’ or even run a sniffer. Without promisc mode, ifconfig looks like
/sbin/ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:19:**:**:**:**
media: autoselect status: inactive
supported media: autoselect 10baseT/UTP <half-duplex> 10baseT/UTP <full-duplex> 10baseT/UTP <full-duplex,hw-loopback> 10baseT/UTP <full-duplex,flow-control> 100baseTX <half-duplex> 100baseTX <full-duplex> 100baseTX <full-duplex,hw-loopback> 100baseTX <full-duplex,flow-control> 1000baseT <full-duplex> 1000baseT <full-duplex,hw-loopback> 1000baseT <full-duplex,flow-control> none
With promisc mode activated:
/sbin/ifconfig en0
ether 00:19:**:**:**:**
media: autoselect status: inactive
supported media: autoselect 10baseT/UTP <half-duplex> 10baseT/UTP <full-duplex> 10baseT/UTP <full-duplex,hw-loopback> 10baseT/UTP <full-duplex,flow-control> 100baseTX <half-duplex> 100baseTX <full-duplex> 100baseTX <full-duplex,hw-loopback> 100baseTX <full-duplex,flow-control> 1000baseT <full-duplex> 1000baseT <full-duplex,hw-loopback> 1000baseT <full-duplex,flow-control> none
netstat
Be carefull with netstat, it is not so hard to compromise “its results”.
netstat -anp tcp
netstat -anp udp
lsof
lsof -i tcp
lsof -i udp
Firewall
ipfw
The default rule is not really restrictive:
#ipfw list
65535 allow ip from any to any
Same for the IPv6 network stack, the default rules list looks like:
ip6fw list
33300 deny ipv6-icmp from any to any in icmptype 128
65535 allow ipv6 from any to any
ipfw traffic shapping
If the bandwidth used can be known (estimation at least; if the use is “constant” it is really efficient) in advance, allocating only the requested amount will not let enough “space” (bandwidth) available for an intruder.
As an example, create a pipe that only allows up to 42KB/s to go through.
sudo ipfw pipe 1 cg``onfi`` bw 42KByte/s
Attach that pipe to the outgoing traffic on port 22, effectively limiting the outgoing traffic of sshd.
sudo ipfw add 1 pipe 1 src-port 22
Remove the pipe from the port.
sudo ipfw delete 1
firewall state in sysctl
The state of the firewall (enabled or disabled) can be changed by directly changing a kernel parameter.
Enable the firewall (default):
sysctl -w net.inet.ip.fw.enable=0
Disables the firewall:
sysctl -w net.inet.ip.fw.enable=1
More info:
net.inet.ip.fw.verbose_limit: 0
net.inet.ip.fw.verbose: 2
net.inet.ip.fw.debug: 0
net.inet.ip.fw.one_pass: 0
net.inet.ip.fw.autoinc_step: 100
net.inet.ip.fw.enable: 1
Rules examples
TODO
Block dns multicast (5353)
grep -i 5353 /etc/services
mdns 5353/udp # Multicast DNS
mdns 5353/tcp # Multicast DNS
FIXME
Activating NAT on server side
FIXME Create /etc/natd.conf and add:
interface en0
same_ports yes
use_sockets yes
unregistered_only yes
Add dynamic yes if you have a dynamic IP.
Add log_denied no if you want to log packets blocked by the NAT device
Configure internal interface en0 with a private address (i.e: 192.168.1.1)
Enable IP forwarding in the kernel, it’s needed. Non persistent way:
sysctl -w net.inet.ip.forwarding=1
Persistent way, in /etc/hostconfig, add or change the value to IPFORWARDING=-YES-
Route packets from the internal network to the external one via en0:
ipfw add divert natd ip from any to any via en0
Launch natd:
/usr/sbin/natd -f /etc/natd.conf
Use NAT on client side
IP address: 192.168.1.* (obviously 192.168.1.1 is reserved) Subnet mask: 255.255.254.0 Gateway/default router: 192.168.1.1 DNS servers: same as the router (but not necessarily)
Enable a caching name server on NAT server side
In /etc/hostconfig, add or change the line to DNSSERVER=-YES-
__
__
Services
Cups
FIXME By default, all local user can access to http://127.0.0.1:631 (a web admin front-end).
Enable cupsd service
sudo launchctl load -w /System/Library/LaunchDaemons/org.cups.cupsd.plist
Disable cupsd service
sudo launchctl unload -w /System/Library/LaunchDaemons/org.cups.cupsd.plist
FIXME
ftp
Disable ftp
launctl unload -w /System/Library/LaunchDaemons/ftp.plist
Enable ftp
launctl load -w /System/Library/LaunchDaemons/ftp.plist
Samba
Disable SMB
defaults delete /Library/Preferences/SystemConfiguration/com.apple.smb.server EnabledServices
launctl unload -w /System/Library/LaunchDaemons/nmbd.plist
launctl unload -w /System/Library/LaunchDaemons/smbd.plist
AFP
Disable Apple File Server
launctl unload -w /System/Library/LaunchDaemons/com.apple.AppleFileServer.plist
ntp
FIXME /etc/ntp.conf
NFS
FIXME
Disable NFS
launchctl unload -w /System/Library/LaunchDaemons/com.apple.portmap.plist
launchctl unload -w /System/Library/LaunchDaemons/org.postfix.master.plist
Enable NFS
launchctl load -w /System/Library/LaunchDaemons/com.apple.portmap.plist
launchctl load -w /System/Library/LaunchDaemons/org.postfix.master.plist
Bonjour
FIXME
Disable Bonjour
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
Enable Bonjour
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
Change Bonjour hostname
No spaces or non-DNS characters allowed for <hostname>
scutil --set LocalHostName <hostname>
…
SSH
FIXME There are so many tutorials available about how to configure and/or secure sshd that we do not need to explain these points.
Check fingerprint
Prints fingerprint of the server’s RSA key:
ssh-keygen -l -f /private/etc/ssh_host_rsa_key.pub
FIXME
sshd
FIXME
Client’s side
FIXME Edit /private/etc/sshd_config
Change PasswordAuthentication yes to PasswordAuthentication no
Change RSAAuthentication yes to RSAAuthentication no if key-based authentication is used
more
FIXME
Tunneling
From the man:
The following example tunnels an IRC session from client machine ``127.0.0.1'' (localhost) to remote server
``server.example.com'':
$ ssh -f -L 1234:localhost:6667 server.example.com sleep 10
$ irc -c '#users' -p 1234 pinky 127.0.0.1
Perimetric security
Preventing RF eavesdroppers
Faraday cage
Blocks out external static electrical fields and shield the interior from external electromagnetic radiation. Named after physicist Michael Faraday, who built one in 1836.
You can also encrypt your communication and/or add noise if you cannot managed to block output emits, though according to “Shannon”, it’s probably not the most efficient way.
Wireless emission
No driver reported to work at this time. See Network page for update. freeradius and openradius (802.11X could be then tested, though wireless is not mandatory for this kind of service). Reduce power emit. Add “many” fakeap clones. WPA2 minimum. etc… http://www.swisswireless.org/wlan_calc_en.html
Bluetooth
No support known on Darwin (need investigation).
Screen disclosure
Away from the screen, no information nor open privileged prompt should remain. Potential solution(s):
- removing scrollback buffer (is it possible on Darwin? is there any scrollback first?)
- Screen blanking
- Automatic logout (nyi)
- Screensaver
- etc..
Disable some kext to avoid potential physical security flaws
Remove Airport support
No driver available at this time or reported to work, although the operation should be similar as below.
You can safely remove it if you don’t plan to use wireless network interface: sudo srm -Rf /System/Library/Extensions/AppleAirPort.kext sudo touch /System/Library/Extensions
Remove bluetooth support
No driver available at this time or reported to work, although the operation should be similar as below.
Prevent someone to reach your computer bluetooth:
sudo srm -Rf /System/Library/Extensions/IOBluetoothFamily.kext
sudo srm -Rf /System/Library/Extensions/IOBluetoothHIDDriver.kext
sudo touch /System/Library/Extensions
Removing audio support
No driver available at this time or reported to work, although the operation should be similar as below.
Prevent someone to listen your microphone:
sudo srm -Rf /System/Library/Extensions/AppleOnboardAudio.kext sudo srm -Rf /System/Library/Extensions/AppleUSBAudio.kext sudo srm -Rf /System/Library/Extensions/AudioDeviceTreeUpdater.kext sudo srm -Rf /System/Library/Extensions/IOAudioFamily.kext sudo srm -Rf /System/Library/Extensions/VirtualAudioDriver.kext sudo touch /System/Library/Extensions
Removing video support
No driver available at this time or reported to work, although the operation should be similar as below. Prevent someone trying to watch your webcam: sudo srm -rf /System/Library/Extensions/Apple_iSight.kext sudo srm -rf /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext sudo touch /System/Library/Extensions
Removing USB support
**Warning: **Since we boot on USB we shouldn’t remove this one. You probably can safely remove this one if you boot on firewire, cdrom, in a vm or other medium:
sudo srm -rf /System/Library/Extensions/IOUSBMassStorageClass.kext
sudo touch /System/Library/Extensions
Removing FireWire support
Except if you boot on firewire or simply need it, you could safely remove this one:
sudo srm -rf /System/Library/Extensions/IOFireWireSerialBusProtocolTransport.kext
sudo touch /System/Library/Extensions
Serialization
ioreg
The I/O Kit registry is an abstraction layer of some logical and physical information. We can use it to retrieve some unique identifiers. Write somewhere (away from your computer) as serials you will find as possible:
ioreg -c “IOPlatformExpertDevice” | awk -F ‘“’ ‘/IOPlatformSerialNumber/ {print $4}’
Q723******
ioreg -c “IOPlatformExpertDevice” | awk -F ‘“’ ‘/product-name/ {print $4}’
MacBook2,1
ioreg -c “IOPlatformExpertDevice” | awk -F ‘“’ ‘/board-id/ {print $4}’
Mac-F420****
ioreg -c “IOPlatformExpertDevice” | awk -F ‘“’ ‘/IOPlatformUUID/ {print $4}’
00000000-0000-00-00-0019E33
ioreg -c “ATADeviceNub” | awk -F ‘“’ ‘/device serial/ {print $4}’
K0075******
ioreg -c “AppleAHCIDiskDriver” | awk -F ‘“’ ‘/Serial Number/ {print $4}’
K439T7******
ioreg -l | grep -i ‘serial number’
| | | | “Serial Number” = “ K439********“
ioreg -l | grep -i ‘serialnumber’ | “IOPlatformSerialNumber” = “WQ7********”
| | “BatterySerialNumber” = “DP-ASM****-3***-3***”
| | “SerialNumber” = 12***
ioreg -l | grep -i ‘serial-number’
| “serial-number” = <5940000000000000000000057513*******94100000000000000000000000000000000000000>
ioreg -l | grep -i ‘device serial’
| | | | | “device serial” = “K0075S***** “
ioreg -l -w0 -p IODeviceTree | grep device-prop ``
Backup and checksum
Usefull behaviors.
Pseudo backup tools
This list is not exhaustive and this page is not about a complete guide on “how to backup well”; depending your tastes and tool availability, there are several ways to achieve correct backuping and many tools:
- ditto
- dump/restore
- pax
- rsync
- scp
- tar For more information, take a look at http://developer.apple.com/macosx/backuponmacosx.html.
Checksum
We use internally a checksum list for binary roots and binary drivers intregrity (not for security purpose). The DarwinBuild project and the MacPorts project also maintain and check integrity of their sources and binaries. Paranoid: Strong Fingerprints must be trusted and encrypted or stored in an encrypted disk image.
md5
Try to avoid for historic security purposes, collisions are easy to create.
SHA-1
Collisions can be created but it’s “ok” for literal integrity purpose (not for fingerprint security purpose).
/usr/bin/openssl sha1 mach_kernel
SHA1(BuildRoot/mach_kernel)= 19cecd3bd87c10bc4e2c167188a299a40c10d199
Paranoid: Best is to use a concatenation of several strong checksums.
SHA-2 family
FIXME Appendix
The dynamic linker library (dyld)
FIXME dyld can:
- Dynamically link new libraries into memory
- Recover base addresses for existing libraries Library offsets are not randomized between
- invocations of the same program
- invocations of different programs but seems to not be the same from different leopard install.
FIXME
Disable Spotlight for a volume and erase its current meta data
mdutil -E -i off $PUREDARWIN
Defeat nmap fingerprint
Choose value between available choices:
sysctl -w net.inet.tcp.blackhole=[0 | 1 | 2]
sysctl -w net.inet.udp.blackhole=[0 | 1]
Tools and more
bro prelude Found in MacPorts SourceFire/Snort (MP) chkrootkit (MP) nmap (MP) rkhunter (?) tripwire (MP) etc..
Initial version on MMVIII VI VIII 2008/06/08
Bonjour
Bonjour is Apple’s implementation of the Zeroconf service discovery protocol. mDNSResponder is the open source software from Apple that implements Bonjour in both Mac OS X and Darwin.
Announcing services
Manually
To manually announce services on the local network, you can use the mDNS command.
# Announce HTTP server
mDNS -R . _http._tcp . 80
# Announce AFP server
mDNS -R . _afpovertcp._tcp. 548
More service types are defined at http://www.dns-sd.org/ServiceTypes.html
Automatically
Servers on Darwin systems are usually launched through launchd. You can use the Bonjour key in LaunchDaemons plist files to have launchd automatically announce services.
Browsing services
To browse announced services on the Mac, you can use Bonjour Browser.
References
Compatible Hardware
Virtual
Pseudo-legend: Host *Soft version x.y.z (+ info(s))
- cpu + info(s) Apple Mac OS X (Snow) Leopard QEMU > v0.9.0
- Intel Core 2 Duo (T7400) VMware Fusion
- Intel Core 2 Duo (T7400) MS Windows QEMU v0.10.0 (XP 32 bits SP3)
- AMD Sempron 2800+ (specific version from “Patrick”, see QEMU page) VMware Server 2.0 nc (AMD 64bits) VMware Player 2.5.1 (XP 32 bits SP3) VMware Player 2.5.2 (WIN7 64bits RC)
- Intel Core 2 Quad (Q9400) GNU/Linux kvm (Ubuntu 8.10)
- AMD Phenom(tm) II X4 940 Processor VMware Player 2.5 (Ubuntu, Fedora 8, OpenSuse 64 bits) VMware Server 2.0.0 (SMP x86_64) via VMware Infrastructure Web Access
- Dual Core AMD Opteron(tm) Processor 180 (Sun Fire(TM) X2100)
Physical
- Apple MacBook2,1 (Intel Core 2 Duo 2.16Ghz)
- Apple MacBookPro3,1
- ? ich7m, T7200, 945pm
- IBM T42
- Lenovo S10 (no Ethernet yet)
- Netbook nc10
- Acer Aspire 5610Z (Intel T2060 1.6Ghz)
- MSI Wind U100 (no XFree86 yet)
Filesystem hierarchy
Ever wondered what /etc, /usr, /opt, and so on mean? Ever wondered what the differences between /lib, /usr/lib, /usr/local/lib are? Ever wondered what libexec and standalone mean?
Commonly used Darwin specialties at the bottom of this page.
BSD man hier
HIER(7) FreeBSD Miscellaneous Information Manual HIER(7)
NAME
hier -- layout of file systems
DESCRIPTION
A sketch of the file system hierarchy.
/ root directory of the file system
/bin/ user utilities fundamental to both single-user and multi-user
environments
/boot/ programs and configuration files used during operating system
bootstrap
defaults/ default bootstrapping configuration files; see
loader.conf(5)
kernel/ pure kernel executable (the operating system loaded
into memory at boot time).
modules/ third-party loadable kernel modules; see kldstat(8)
/cdrom/ default mount point for CD-ROM drives (created by
sysinstall(8))
/compat/ normally a link to /usr/compat. If not, then the /usr/compat
comments apply (created by sysinstall(8))
/dev/ device special files managed by devfs(5)
fd/ file descriptor files; see fd(4)
net/ network devices
/dist/ mount point used by sysinstall(8)
/etc/ system configuration files and scripts
defaults/ default system configuration files; see rc(8)
bluetooth/ bluetooth configuration files
gnats/ gnats configuration files; see send-pr(1)
isdn/ isdn4bsd configuration files; see isdnd(8)
localtime local timezone information; see ctime(3)
mail/ Sendmail control files
mtree/ mtree configuration files; see mtree(8)
namedb/ named configuration files; see named(8)
pam.d/ configuration files for the Pluggable Authentica-
tion Modules (PAM) library
periodic/ scripts that are run daily, weekly, and monthly,
via cron(8); see periodic(8)
rc.d/ System and daemon startup/control scripts; see
rc(8)
security/ OpenBSM audit configuration files; see audit(8)
ppp/ ppp configuration files; see ppp(8)
ssh/ OpenSSH configuration files; see ssh(1)
ssl/ OpenSSL configuration files
/lib/ critical system libraries needed for binaries in /bin and
/sbin
geom/ class-specific libraries for the geom(8) utility
/libexec/ critical system utilities needed for binaries in /bin and
/sbin
/media/ contains subdirectories to be used as mount points for remov-
able media such as CDs, USB drives, and floppy disks
/mnt/ empty directory commonly used by system administrators as a
temporary mount point
/proc/ process file system; see procfs(5)
/rescue/ statically linked programs for emergency recovery; see
rescue(8)
/root/ root's HOME directory
/sbin/ system programs and administration utilities fundamental to
both single-user and multi-user environments
/tmp/ temporary files that are not guaranteed to persist across sys-
tem reboots
/usr/ contains the majority of user utilities and applications
bin/ common utilities, programming tools, and applica-
tions
compat/ files needed to support binary compatibility with
other operating systems, such as Linux (created by
sysinstall(8))
games/ useful and semi-frivolous programs
include/ standard C include files
altq/ C include files for alternate queueing
arpa/ C include files for Internet service
protocols
bsnmp/ C include files for the SNMP daemon
c++/ C++ include files
cam/ C include files for the Common Access
Methods Layer
scsi/ The SCSI device on top of
CAM
dev/ C include files for programming various
FreeBSD devices
ic/ Various header files
describing driver- and bus-
independent hardware cir-
cuits
ofw/ Open Firmware support
pbio/ 8255 PPI cards; see pbio(4)
ppbus/ The parallel port bus; see
ppbus(4)
usb/ The USB subsystem
utopia/ Physical chip driver for ATM
interfaces; see utopia(4)
wi/ The wi(4) WaveLAN driver
fs/
fdescfs/ per-process file descriptors
file system
fifofs/ IEEE Std 1003.1
(``POSIX.1'') FIFOs file
system
msdosfs/ MS-DOS file system
ntfs/ NTFS file system
nullfs/ loopback file system
nwfs/ NetWare file system
portalfs/ portal file system
procfs/ process file system
smbfs/ SMB/CIFS file system
udf/ UDF file system
unionfs union file system
geom/ GEOM framework
concat/ CONCAT GEOM class
gate/ GATE GEOM class
mirror/ MIRROR GEOM class
nop/ NOP GEOM class
raid3/ RAID3 GEOM class
stripe/ STRIPE GEOM class
isc/ ISC utility library libisc include files
isofs/
cd9660/ iso9660 file system
libmilter/ C include files for libmilter, the
sendmail(8) mail filter API
machine/ machine-specific C include files
net/ miscellaneous network C include files
netatalk/ Appletalk protocol
netatm/ ATM include files; see atm(8)
netinet/ C include files for Internet standard
protocols; see inet(4)
netinet6/ C include files for Internet protocol
version 6; see inet6(4)
netipsec/ kernel key-management service; see
ipsec(4)
netipx/ IPX/SPX protocol stacks
netnatm/ NATM include files; see natm(4)
api/ include files for the sig-
nalling API
msg/ include files that describe
signalling messages and
declare associated functions
saal/ include files for the sig-
nalling AAL layer
sig/ include files for the UNI
signalling protocol
netsmb/ SMB/CIFS requester
nfs/ C include files for NFS (Network File
System)
objc/ Objective C include files
openssl/ OpenSSL (Cryptography/SSL toolkit) head-
ers
pccard/ PC-CARD controllers
protocols/ C include files for Berkeley service
protocols
readline/ get a line from a user, with editing;
see readline(3)
rpc/ remote procedure calls; see rpc(3)
rpcsvc/ definition of RPC service structures;
see rpc(3)
security/ PAM; see pam(8)
sys/ system C include files (kernel data
structures)
ufs/ C include files for UFS (The U-word File
System)
ffs/ Fast file system
ufs/ UFS file system
vm/ virtual memory; see vmstat(8)
lib/ shared and archive ar(1)-type libraries
aout/ a.out archive libraries
compat/ shared libraries for compatibility
aout/ a.out backward compatibility
libraries
dtrace/ DTrace library scripts
engines/ OpenSSL (Cryptography/SSL toolkit)
dynamically loadable engines
libdata/ miscellaneous utility data files
gcc/ gcc(1) configuration data
ldscripts/ linker scripts; see ld(1)
lint/ various prebuilt lint libraries; see
lint(1)
libexec/ system daemons & system utilities (executed by other
programs)
aout/ utilities to manipulate a.out executa-
bles
elf/ utilities to manipulate ELF executables
lpr/ utilities and filters for LP print sys-
tem; see lpr(1)
sendmail/ the sendmail(8) binary; see
mailwrapper(8)
sm.bin/ restricted shell for sendmail(8); see
smrsh(8)
local/ local executables, libraries, etc. Also used as the
default destination for the FreeBSD ports framework.
Within local/, the general layout sketched out by
hier for /usr should be used. Exceptions are the
man directory (directly under local/ rather than
under local/share/), ports documentation (in
share/doc/<port>/), and /usr/local/etc (mimics
/etc).
obj/ architecture-specific target tree produced by build-
ing the /usr/src tree
ports/ The FreeBSD ports collection (optional).
sbin/ system daemons & system utilities (executed by
users)
share/ architecture-independent files
calendar/ a variety of pre-fab calendar files; see
calendar(1)
dict/ word lists; see look(1)
freebsd FreeBSD-specific terms,
proper names, and jargon
words common words
web2 words from Webster's 2nd
International
papers/ reference databases; see
refer(1)
doc/ miscellaneous documentation; source for
most of the printed BSD manuals (avail-
able from the USENIX association)
FAQ/ Frequently Asked Questions
IPv6/ implementation notes for IPv6
bind/ documents pertaining to BIND
(the Berkeley Internet Name
Domain)
es/ Spanish translations of docu-
ments in /usr/share/doc
handbook/ FreeBSD Handbook
ja/ Japanese translations of doc-
uments in /usr/share/doc
legal/ License files for vendor sup-
plied firmwares
ncurses/ HTML documents pertaining to
ncurses; see ncurses(3)
ntp/ HTML documents pertaining to
the Network Time Protocol
papers/ UNIX Papers
psd/ UNIX Programmer's Supplemen-
tary Documents
ru/ Russian translations of docu-
ments in /usr/share/doc
smm/ UNIX System Manager's Manual
tutorials/ FreeBSD tutorials
usd/ UNIX User's Supplementary
Documents
zh/ Chinese translations of docu-
ments in /usr/share/doc
examples/ various examples for users and program-
mers
games/ ASCII text files used by various games
groff_font/
device description file for device name
info/ GNU Info hypertext system
isdn/ ISDN
locale/ localization files; see setlocale(3)
man/ manual pages
me/ macros for use with the me macro package;
see me(7)
misc/ miscellaneous system-wide ASCII text
files
fonts/ ???
termcap terminal characteristics
database; see termcap(5)
mk/ templates for make; see make(1)
nls/ national language support files; see
mklocale(1)
security/ data files for security policies such as
mac_lomac(4)
sendmail/ sendmail(8) configuration files
skel/ example . (dot) files for new accounts
snmp/ MIBs, example files and tree definitions
for the SNMP daemon.
defs/ Tree definition files for use
with gensnmptree(1)
mibs/ MIB files
syscons/ files used by syscons; see syscons(4)
fonts/ console fonts; see
vidcontrol(1) and vidfont(1)
keymaps/ console keyboard maps; see
kbdcontrol(1) and kbdmap(1)
scrnmaps/ console screen maps
tabset/ tab description files for a variety of
terminals; used in the termcap file; see
termcap(5)
tmac/ text processing macros; see nroff(1) and
troff(1)
vi/ localization support and utilities for
vi(1)
zoneinfo/ timezone configuration information; see
tzfile(5)
src/ BSD, third-party, and/or local source files
bin/ source code for files in /bin
contrib/ source code for contributed software
crypto/ source code for contributed cryptography
software
etc/ source code for files in /etc
games/ source code for files in /usr/games
gnu/ Utilities covered by the GNU General
Public License
include/ source code for files in /usr/include
kerberos5/ build infrastructure for kerberos ver-
sion 5
lib/ source code for files in /usr/lib
libexec/ source code for files in /usr/libexec
release/ files required to produce a FreeBSD
release
sbin/ source code for files in /sbin
secure/ build directory for files in
/usr/src/crypto
share/ source for files in /usr/share
sys/ kernel source code
tools/ tools used for maintenance and testing
of FreeBSD
usr.bin/ source code for files in /usr/bin
usr.sbin/ source code for files in /usr/sbin
/var/ multi-purpose log, temporary, transient, and spool files
account/ system accounting files
acct execution accounting file; see acct(5)
at/ timed command scheduling files; see at(1)
jobs/ directory containing job files
spool/ directory containing output spool files
backups/ miscellaneous backup files
crash/ default directory to store kernel crash dumps; see
crash(8) and savecore(8)
cron/ files used by cron; see cron(8)
tabs/ crontab files; see crontab(5)
db/ miscellaneous automatically generated system-spe-
cific database files
empty/ empty directory for use by programs that need a
specifically empty directory. Used for instance by
sshd(8) for privilege separation.
games/ miscellaneous game status and score files
heimdal/ kerberos server databases; see kdc(8)
log/ miscellaneous system log files
wtmp login/logout log; see wtmp(5)
mail/ user mailbox files
msgs/ system messages database; see msgs(1)
preserve/ temporary home of files preserved after an acciden-
tal death of an editor; see ex(1)
quotas/ file system quota information files
run/ system information files describing various info
about system since it was booted
named/ writable by the ``bind'' user; see
named(8)
ppp/ writable by the ``network'' group for
command connection sockets; see ppp(8)
utmp database of current users; see utmp(5)
rwho/ rwho data files; see rwhod(8), rwho(1), and
ruptime(1)
spool/ miscellaneous printer and mail system spooling
directories
clientmqueue/
undelivered submission mail queue; see
sendmail(8)
ftp/ commonly ~ftp; the anonymous ftp root
directory
mqueue/ undelivered mail queue; see sendmail(8)
output/ line printer spooling directories
tmp/ temporary files that are kept between system
reboots
vi.recover/
the directory where recovery files are
stored
yp/ the NIS maps
NOTES
This manual page documents the default FreeBSD file system layout, but
the actual hierarchy on a given system is defined at the system adminis-
trator's discretion. A well-maintained installation will include a cus-
tomized version of this document.
SEE ALSO
apropos(1), find(1), finger(1), grep(1), ls(1), whatis(1), whereis(1),
which(1), fd(4), devfs(5), fsck(8)
HISTORY
A hier manual page appeared in Version 7 AT&T UNIX.
FreeBSD 7.0 June 28, 2007 FreeBSD 7.0
Commonly used Darwin specialties
- /opt/local/ MacPorts-installed software
- **/sw/ **fink-installed software
- /usr/local/ Some DarwinBuild-installed software
- **/usr/standalone/i386/ **Darwin bootloader
$PATH
Note that in the BSD paths, /usr/local/bin comes after /usr/bin (unlike in GNU world, where /usr/local/bin might come before /usr/bin)
Darwin 9
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
Mac OS X 10.5
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/libexec:/System/Library/CoreServices
FreeBSD (example for “BSD world”)
to be posted
Ubuntu (example for “GNU world”)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Library path
Darwin world: $DYLD_LIBRARY_PATH GNU world: $LD_LIBRARY_PATH
GNOME
GNOME is a graphical desktop environment and development platform. For more information, see http://www.gnome.org/. This page is about running GNOME components on a PureDarwin system.
GNOME components running in PureDarwin 9
Right now, we have the following components running on PureDarwin 9.
metacity
Metacity is the window manager most commonly used with GNOME. Once you have installed it (e.g., from MacPorts) and try to launch it, you will get
Window manager warning: Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details - 1: Failed to get connection to session: Not enough memory) Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that org.freedesktop.dbus-session.plist is loaded! Window manager warning: Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details - 1: Failed to get connection to session: Not enough memory)
Then simply
launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist metacity
and it will run.
zenity
Zenity is a little tool that can be used (e.g., in bash scripts) to create simple GTK dialogs.
Installing PureDarwin
Don’t get too excited: we haven’t put together a full “How to” yet. This page will provide a selection of pointers.
Installing PureDarwin using GRUB and CHAMELEON
The process for installing PureDarwin to boot using the GRUB and CHAMELEON bootloaders (perhaps as part of a multi-boot system) is described below. Thanks to poppyer for the information.
The basic booting procedure is: GRUB(MBR) -> CHAMELEON boot1h -> CHAMELEON boot2 -> darwin kernel
First of all, preparing a primary partition as hfs partition NOTES: I only try these on a primary partition, so I am not sure whether it works for logical extended partition
-
make an hfs partition and mount it * FOR LINUX: using mkfs.hfs * FOR OSX: using the Disk Utils.app
-
loop mount the puredarwin image (iso or vmdk) * loop mount a vmdk might be tricky under linux.
-
copy everything from the puredarwin image to your hfs partition * FOR LINUX: using sudo cp -a * FOR OSX: using sudo cp -pR in order to preverse file wnerships etc.
So far, the hfs partition is ready, now going to install the boot loader
-
Download an extract the Chameleon Boot Loader to any folder. Copy the “boot” file (often called boot2) to the root of your hfs partition.
-
Unmount your HFS partition (VERY IMPORTANT) dd the “boot1h” file (1024 bytes) from chamelaeon to the bootsector of you hfs partition.
By here, the hfs partition is self bootable, now add it to your first level boot loader (GRUB)
- add and item to the menu.lst of your GRUB (MBR), usually: rootnotify (hd?,?) makeactive chainloader +1
Last, if your CPU is SSE2 only, you MUST use the voodoo kernel BEFORE your reboot, edit the /Library/Preferences/SystemConfiguration/com.apple.Boot.plist, add “.voodoo” to “mach_kernel”, so it becomes “mach_kernel.voodoo” * mach_kernel.voodoo is already shipped with puredarwin.Xmas
- but mach_kernel.voodoo uses its own System.kext
Troubleshooting: Q: if your first reboot freeze at: “MAC Framework successfully initialized using ….” A: you might need a patched version of AppleACPIPlatform.kext and AppleAPIC.kext from boot132 generic.iso to replace those ones under /Systerm/Library/Extensions/
Preparing a Disk Using Darwin Tools
(Sorry, these are just quick notes while I still remember.)
You will need:
- The Chameleon boot loader, installed into /usr/standalone/i386/
fdisk(a version comes with Chameleon, so use that one)dd,newfs_hfsandmountThen, assuming that you’re working with the first disk (0):
- Create a partition and install the primary bootloader:
fdisk -i -a hfs /dev/rdisk0 - Create an HFS+ file system on the disk:
newfs_hfs -s -J -v /dev/rdisk0 - Install the secondary bootloader:
dd if=/usr/standalone/i386/boot1h of=/dev/rdisk0s1 - Mount the partition:
mount -t hfs /dev/rdisk0s1 /tmp - Install the tertiary bootloader:
cp /usr/standalone/i386/boot /tmp/ - Install the kernel and everything else onto the system Simples, eh? A version of the PureDarwin Nano CD image with these tools installed will be available soon.
Links
Apple
- Apple Open Source
- Apple man pages (command line documentation)
- Apple Darwin guides list
Community projects
- MacPorts (FreeBSD-like ports; especially portfiles with +puredarwin variants)
- Fink (debian-like dpkg/apt-get for Darwin)
- pkgsrc (The NetBSD Packages Collection)
- Mirror of the former OpenDarwin site
- Darbat Darwin/L4/Darwin, an experimental port of Darwin to the L4 microkernel (Thesis)
- Darwin cross compiler for Linux
Documentation
- Amit Singh’s website and Mac OS X Internals book website
Events
- FOSDEM’09 (Free and Open Source Software Developers’ European Meeting) - Brussels (Belgium), February 2009
- WWDC09 (Apple Worldwide Developers Conference) - San Francisco, June 2009
- HAR2009 (Hacking At Random) - Netherlands?, August 2009 Looking for sponsors for PureDarwin to attend these ;-)
Miscellaneous
Netatalk
Mac OS X comes with a Apple File Protocol (AFP) server which is closed source and unavailable for PureDarwin. Hence, if you would like to use PureDarwin as a file, print and time server for Macintosh computers, you need to use netatalk, a third-party, open source implementation of the AppleTalk suite of protocols. It allows PureDarwin to act as an AFP server and can act as a Time Machine server similar to Apple’s Time Capsule. This page describes how to install and configure netatalk on PureDarwin.
Installing netatalk on PureDarwin
netatalk can be installed from MacPorts. Execute the following command to start it, and to cause it to launch at startup:
sudo launchctl load -w /Library/LaunchDaemons/org.macports.netatalk.plist
This, among other things, launches /opt/local/sbin/afpd, which is netatalk’s AFP server.
From this moment on, you should be able to connect to your server from any mac using afp://servername or afp://0.0.0.0 (using your server’s IP adress).
Configuring netatalk
After installation, you will be unable to log in. Instead, you will get a message that the username/password is wrong, and /opt/local/var/log/netatalk.log shows
[uams_dhx_pam.c:497]: I:UAMSDaemon: uams_dhx_pam.c :PAM: PAM_Error: Authentication failure
This can be fixed by creating the file /etc/pam.d/netatalk with the following content:
auth required pam_nologin.so auth sufficient pam_securityserver.so auth sufficient pam_unix.so auth required pam_deny.so account required pam_permit.so password required pam_deny.so session required pam_uwtmp.so
Now you should be able to log in using your username and password, and should be able to access your files. See MacPorts #23313
By default, every user can access his home directory. Note however that every user can mark other areas he has (read) access to as shared, including the entire hard disk. All he has to do is create a file .AppleVolumes in his home directory with the following content:
Export the entire hard disk
/ “/”
Is it possible to disallow users from this? Announcing to Bonjour (mDNSResponder)
This section is about announcing the server on the local network, so that it shows up in the Finder:
On the Mac, the AppleFileServer is launched and announced on the local network via Bonjour using the following LaunchDaemons plist file. We would like to do the same with netatalk, but we are running into problems…
This tells launchd to announce the AFP server on the local network with Bonjour and launch the AFP server whenever the “afpovertcp” port is accessed. The file /etc/services contains the definition that this equals port 548.
If we copy the bold part from above into the netatalk LaunchDaemon plist, then netatalk gets announced on the local network as a server (i.e., it shows up automatically on the left-hand side in Finder), but we get
E:AFPDaemon: main: dsi_init: Address already in use
in the syslog and cannot connect to the server because afpd can’t start.
Please let us know what to do. See MacPorts #23315. According to the maintainer, this has been discussed upstream. As of January 2010, there is a proposal for a possible solution, which might be included in some future Netatalk release.
As a workaround, you can edit /opt/local/etc/netatalk/initscript so that it starts and stops dns-sd. While this is not elegant, it does work at least. Insert the three bold lines into /opt/local/etc/netatalk/initscript:
"$PREFIX/sbin/afpd" $AFPD_UAMLIST -g $AFPD_GUEST -c $AFPD_MAX_CLIENTS
**dns-sd -R . _afpovertcp._tcp . 548 &**
printf " Done.n"
kill $CNID_PID
**DNS_SD_PID=`ps aux | grep -v awk | awk '/^root.*afpovertcp/ {print $2}'**
** kill DNS_SD_PID**
fi
Reload with:
sudo launchctl unload -w /Library/LaunchDaemons/org.macports.netatalk.plist
sudo launchctl load -w /Library/LaunchDaemons/org.macports.netatalk.plist
Now you should see your PureDarwin server in the Finder of the Macs in your local network and should be able to connect and log in using the server username and password.
OpenSSH
This page describes how to use ssh (SSH client and OpenSSH daemon) on PureDarwin.
Installing the SSH server
To install the SSH server, simply install OpenSSH.root.tar.gz (you can find a version compiled for Darwin 9 here).
Activating the SSH server
To activate the SSH server (it will be automatically launched on every boot), issue
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
To stop the SSH server, issue
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist
Connecting to the SSH server
To connect, do ssh localhost -l toor
if you have a user “toor”. Don’t forget to change the password with the “passwd” command.
Prerequisites
This list does not consider the PowerPC platform since no PowerPC hardware is available in the marketplace any more to our knowledge, other than used vintage Macs (which already come with Mac OS X).
+--------------------------------------+--------------------------------------+
| <div | - See |
| style="display:block;text-align:left | [here](http://www.opensource.app |
| "> | le.com/darwinsource/projects/other/D |
| | arwinInstaller-1/INSTALL.x86.txt). |
| [](prerequis | project is <span |
| ites/darwin8.gif%3Fattredirects=0) | style="font-weight:bold">not</sp |
| | an> about |
| </div> | running Darwin 8 and |
| | earlier and we will not support |
| | it in any way. |
+--------------------------------------+--------------------------------------+
| <div | <span |
| style="display:block;text-align:left | style="border-collapse:collapse"> |
| "> | </span> |
| | **For |
| [](prerequis | running on a Macintosh** |
| ites/darwin9.gif%3Fattredirects=0) | A "family 6" Intel processor, which |
| | includes (but is not limited to) |
| </div> | - Core Solo and Core Duo ("Yonah") |
| | - Core 2 Duo and Core 2 Quad |
| | ("Merom", "Penryn", "Conroe", |
| | "Allendale", "Wolfdale", |
| | "Kentsfield", "Yorkfield") |
| | - Celeron S 4x0 ("Conroe-L") |
| | - Celeron E1x00 ("Conroe-L") |
| | - Pentium Dual-Core T2xx0, |
| | E2xx0 ("Yonah-1024", |
| | "Merom-1024", "Allendale-1024") |
| | - Atom 2x0 ("Diamondville") |
| | |
| | For best compatibility, an Intel |
| | chipset (ICHx) |
| | These requirements might be lifted |
| | by the use of the xnu-dev kernel, |
| | [see |
| | here](http://groups.google.com/group |
| | /xnu-dev/web/hardware) |
+--------------------------------------+--------------------------------------+
| <div | - A Macintosh ("Apple-labeled |
| style="display:block;margin-right:au | computer") |
| to;margin-left:auto;text-align:cente | Note that the PureDarwin |
| r"> | project is <span |
| | style="font-weight:bold">not</sp |
| [](prerequisit | about running Mac OS X and we |
| es/xicon.jpg%3Fattredirects=0) | will not support it in any way. |
| | |
| </div> | |
| | |
| | |
+--------------------------------------+--------------------------------------+
Ressources
Intel Processor Spec Finder Intel MacCPUID.app
PureDarwin Nano
This page describes the minimal components needed for a minimal PureDarwin system (also known as “PureDarwin Nano”).
This system is a proof-of-concept of a minimal bootable Darwin 9 system that can be built from the components that Apple provides through the DarwinBuild project.
Download
A ready-made VMware virtual machine containing a minimal Darwin 9 system (PureDarwin nano (based on 9C31)) can be downloaded here.
MD5 (puredarwinnano0df46.tbz2) = f6853449e263dd83bba0ac9662f29143
SHA1 (puredarwinnano0df46.tbz2) = 7a32331fcb443538f0737c172160f3cef6067ec9
The virtual machine contains an ISO that could be used on real hardware as well.
Components
Here is what such a minimal system needs to consist of:
Notes: VoodooPS2* or (exclusively) ACPIPS2Nub.kext and ApplePS2Controller.kext (sources) are only required if you want to use a PS/2 keyboard and/or mouse. The number of files can be further brought down by using a prelinked mach_kernel. This removes the need for the System directory. Using kextcache, the boot process can be faster, the image bigger.
Bootloader
Of course, the system needs to be made bootable by boot and/or efiboot. Chameleon is reported to work.
Installer
An installer is currently being prepared.
Interactive mode
An interactive shell is run by default. In fact, /sbin/launchd is replaced by a shell script that runs /bin/bash.
The Z shell (zsh) is also usable as an interactive UNIX command interpreter (shell).
Virtual machine
“PureDarwin nano” reported to work with VMware products (Fusion and Player), QEMU and VirtualBox See VMware page, QEMU page and VirtualBox page for more information.
VMware
QEMU
PureDarwinBoot
PureDarwin Boot is a minimal Darwin distribution, based on Nano, with a few extra packages added and many unnecessary files removed. It takes up approximately 64Mb, and can be compressed down to 28Mb. By default it runs an installation script (based on the one from Darwin 8, which will partition and format a disk, install bootloaders, and copy across a number of root archives), but you can also drop into a shell where many useful diagnostic and repair tools are available to you.
A binary root of PureDarwin Boot is available below.
Creating a Bootable Image
To create a bootable CD image of PureDarwin Boot you will need the archive below and a copy of the pd_makedmg script from the svn/hg. Assuming you’ve unpacked the archive in your Downloads directory, and as root:
The image will have been created as /tmp/pdboot.iso.dmg, so rename it to pdboot.iso and burn it to a CD.
The Installer
The installer will take you thorough creating a partition for Darwin and will then copy then binary roots found under /System/Installation/Packages/ and named *.root.tar.gz and *.root.tar.bz2. There are no binary roots included in the archive below. A PureDarwin Install CD with images will be produced soon. This information is for if you want to create your own custom install CD.
The files from /System/Installation/Extras/ on the CD will be copied to /System/Installation/Packages/ on the destination partition.
The installer offers you a choice of EFI (for Macs and VMWare Fusion) or Chameleon BIOS bootloader. It also allows you to specify default boot arguments to be passed to the kernel.
A step-by-step guide to installing using it will be written soon. Maybe even by me.
Know Issues
- shutdown does not work. This is because Apple’s shutdown (which this is) attempts to communicate with the kextd before stopping the system. If it cannot contact the kextd (which it can’t because Boot doesn’t run the kextd) it will not allow shutdown.
blessdoes not work, because it requires the ApplicationServices.framework, which isn’t even in the full PureDarwin release. Still, VMWare at least still boots without having its disk blessed. There are also many more problems, I’m sure.
Please leave comments below as you find them.
So far this has been tested on VMWare Fusion and nowhere else.
And, yes, I know they released a Release Candidate of the new Chameleon bootloader today. I’ll get round to looking at it as soon as I can.
Download
Apparently I’m not allowed to upload anything over 11Mb, so you can find the root here.
SpeedStep
SpeedStep is a technology from Intel to throttle the CPU’s clock speed when it is not fully utilized in order to save power. This is especially useful for mobile devices and servers.
On a PureDarwin system, you can use the VoodooPower kernel extension in order to use SpeedStep.
On Intel Atom systems, PureDarwin 9 is known to work well with the VoodooPowerMini.kext (Leopard version) that. (On PureDarwin 10, you’ll use the Snow Leopard version instead.)
You can download it from http://www.superhai.com/darwin.html
After downloading VoodooPowerMini.kext, you can install it on your PureDarwin 9 system:
sudo chown root:wheel 755 VoodooPowerMini.kext sudo chmod -R 755 VoodooPowerMini.kext mv VoodooPowerMini.kext /System/Library/Extensions/ kextload /System/Library/Extensions/VoodooPowerMini.kext
Rebuild kext cache with kextload
Now, you can verify that it is working:
toor@PureDarwin:~% sysctl -a | grep cpufrequency hw.cpufrequency = 800015400 hw.cpufrequency_max: 1600030800 hw.cpufrequency_min: 800015400
If hw.cpufrequency is lower than hw.cpufrequency_max in low-CPU usage situations, then SpeedStep is working correctly.
system-info
`system-info’ is a little OpenSource tool (GPL v3) which reports operating system information.
The project and its sources can be fetched from google code, compiled and run in PureDarwin.
Status
system-info v1.1.3
Resource
http://code.google.com/p/system-info/
The Z shell
This page is about using zsh on PureDarwin system. Normally, PureDarwin comes with the bash shell which most users will be familiar with. Some users might prefer to use zsh however. This page is a work in progress, please feel free to contribute.
Availability
In PureDarwin
Available.
In the DarwinBuild project
Available. See the DarwinBuild page on how to compile a project if needed.
In the MacPorts project
Available. Take a look at Using the MacPorts project page for more information about MacPorts if you don’t know how to build it.
Note: You should also take a look in the available variants (you can use port info zsh or port variants zsh if you want to know the description associated to the respective variant).
The zsh port appears to be “pure” as shown below.
Changing an user’s default shell
To use zsh as the default shell of the currently logged-in user, do
chsh -s /bin/zsh
To revert back to bash, do
chsh -s /bin/bash
zshrc
Populate your ~/.zshrc (or /etc/zshrc) with:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/libexec:/System/Library/CoreServices
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH=/usr/X11R6/bin:$PATH
export EDITOR=/usr/bin/vi
alias ll='ls -lh'
PS1='%n@%m:%~%# '
TERM='vt100'
bindkey -e
- Some PATH could be optional, depending the flavor.
- PS1 sets the prompt like user@PureDarwin:~% in your home dir and
- TERM variable could be ‘ansi’ or per example ‘xterm-color’.
- the bindkey -e command allows you to use emac style for ^A, ^E, and ^D shortcut (how paradoxal since the EDITOR is vi? ;)).
Note: zsh is the only shell we know that it is able to run in interactive mode without (or with a broken) standard input.
Resources
http://zsh.dotsrc.org/ (mirror: http://zsh.sourceforge.net/ )
http://en.wikipedia.org/wiki/Zsh
TightVNC
TightVNC is a way to use X11 applications over the network.
Right now, support for native graphics is limited on PureDarwin. Also, you might want to use X11 over the network. TightVNC, a VNC server that runs on PureDarwin, can offer a graphical desktop for the network that you can access from any Mac OS X, Unix, Linux and Windows machine.
To use TightVNC, install it on a PureDarwin system with MacPorts. Launch it with
vncserver
To connect from a Mac OS X computer running Leopard or later, open Safari and enter the URL vnc://hostname:5901 in the address bar and press enter. You will be connected to the TightVNC server on the PureDarwin host with the name hostname. To connect from other machines, you can use any VNC client.
Note that you should not run the TightVNC server as root.
Also, it might be necessary to
export DISPLAY=:1
in order to launch graphical applications.
To announce the server on the network with Bonjour, you can use
dns-sd -R . _rfb._tcp . 5901 &
Probably a clean launchd LaunchDaemon or LaunchAgent plist file should be written that listens to the port, announces the rfb service with Bonjour and launches TightVNC on demand.
Launching a VNC server for remote screen sharing (working jointly on same session)
The following launches a VNC server that multiple persons can connect to. Using the vncpasswd command, you can set a read-write and a read-only password, making this ideal to do screen sharing.
Xvnc :0 -desktop X -alwaysshared -httpd /opt/local/share/vnc/classes -auth /var/root/.Xauthority -geometry 800x600 -depth 24 -rfbwait 120000 -rfbauth /var/root/.vnc/passwd -rfbport 5900 & twm & xterm & xsetroot -gray Now users can connect to http://the.url:5800 (a page with an embedded VNC viewer served by Xvnc) or can use a native VNC client such as the one built into Mac OS X by entering vnc://the.url
top
This page is about the well-known UNIX tool ‘top’, which display and update sorted information about processes, but differs a little bit from the ‘top’ on other BSDs and/or GNU/Linux.
Problem: logged as a user, `top’ fails in “Bus error” as illustrated below:
** Solution:** Unknown. Please contact us if you know a solution.
‘otool’ says:
/usr/bin/top:
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.13.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/usr/lib/libpanel.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)
As root, there is no problem:
User management
This page is about user management in Darwin. It is a work in progress. Because user management has changed since Darwin 8 via Darwin 9 to Darwin10, this does not fully apply for versions prior to 9 and greater than 9.
Status
Nasty nasty fix: securityd' seems to work reliably if you force it to stick to a single thread (by adding -t 1` to its .plist). Which is bound to cause us more problems in the future. The most problematic point is the frequency of deadlock (significant impact) with this workaround.
Less nasty nasty fix: securityd' seems also to work reliably with 10 threads. Add -t 10` to its .plist, that will also decrease the chance to hit a deadlock.
PAM Error (line 396): Cannot make/remove an entry for the specified session
Examining the config file /etc/pam.d/login, it would appear that the modules pam_launchd and pam_uwtmp are responsible for creating sessions. Further, it seems from debug output that the problem lies within pam_launchd.
Thanks to Apple’s Damien Sorresso on the launchd-dev mailing list for providing the answer to this. login needs a new security session created for it before it can set it up for the new user. This is what sshd does for in-coming users, and what loginwindow.app does for GUI users under OS X. For the moment, a small PAM module (pam_sessioncreate, available on the Downloads page) can be added to /usr/lib/pam/ and to /etc/pam.d/login just above pam_launchd (“session required pam_sessioncreate.so”) to create the necessary session. The file should now include:
[…]
[…]
And then…
Welcome to PureDarwin!
Old problem:
This was solved using the latest PureFoundation root, which added missing symbols (CFStringTransform(), CFPreferencesValueIsForced()) to CFLite and fixed a few bugs it introduced itself. Open Directory
Open Directory, which covers client and server side, is composed of
- DirectoryServices daemon
- Open Directory plug-ins (LDAPv2v3, NetInfo, AppleTalk, Bonjour, Windows…) Directory Services
Directory Services is the component that manages users and permissions, among other things (ie: mount records, service discovery, etc…). Commands of this abstraction layer (here an API) related to Directory Service operate on Open Directory nodes (list, create, read and manage data).
A directory service is a collection of one or more nodes, where a node is a place that can be searched for information.
Notes: All security framework auth uses Directory Services
It seems that the DirectoryServicesDaemon provided in 9J61 prevents any user to login: Jul 22 23:31:07 PureDarwin com.apple.SecurityServer[18]: Entering service Jul 22 23:31:17 PureDarwin com.apple.SecurityServer[18]: getpwnam() failed for user toor, creating invalid credential Jul 22 23:31:17 PureDarwin com.apple.SecurityServer[18]: getpwnam() failed for user toor, creating invalid credential Jul 22 23:31:17 PureDarwin com.apple.SecurityServer[18]: Failed to authorize right system.login.tty by client /usr/bin/login for authorization created by /usr/bin/login.
In the contrary, still no problem with the one from 9G55 Jul 22 23:33:58 PureDarwin com.apple.SecurityServer[18]: Entering service Jul 22 23:34:03 PureDarwin com.apple.SecurityServer[18]: checkpw() succeeded, creating credential for user toor Jul 22 23:34:03 PureDarwin com.apple.SecurityServer[18]: checkpw() succeeded, creating shared credential for user toor Jul 22 23:34:03 PureDarwin com.apple.SecurityServer[18]: Succeeded authorizing right system.login.tty by client /usr/bin/login for authorization created by /usr/bin/login.
Some dependencies also differ between the both binaries (/usr/local/DirectoryService).
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.17.0) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.18.0) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.22.0) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.24.0)
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 34102.0.0) /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 36371.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.3) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
Need investigations.
/var/db/dslocal/
This is the location where Directory Service stores information about users and permissions for a local machine (DirectoryService can be used over the network, too).
/var/db/dslocal/nodes/Default/users/
This directory contains many plist files. The filename is related to the respective existing user.
The content of a (minimal?) generic /var/db/dslocal/nodes/Default/<user>.plist (shadowed hash enabled) looks like:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>authentication_authority</key>
<array>
<string>;ShadowHash;</string>
</array>
<key>generateduid</key>
<array>
</array>
<key>gid</key>
<array>
</array>
<key>home</key>
<array>
</array>
<key>name</key>
<array>
<string><user></string>
</array>
<key>passwd</key>
<array>
<string>********</string>
</array>
<key>realname</key>
<array>
</array>
<key>shell</key>
<array>
</array>
<key>uid</key>
<array>
</array>
</dict>
</plist>
This authentication authority attribute line
A generic authentication authority attribute (semicolon-delimited) looks like:
``
In fact, Open Directory supports many types of authentication:
- <string>;Basic;</string> Basic (supports Crypt password)
- <string>;LocalWindowsHash;</string> Local Windows (NTLM)
- <string>;;LocalCachedUser;/LDAPv3/foobar.domain:<user>:<uuid></string>; Local Cached User (LDAP)
- <string>;Kerberosv5;; Kerberosv5 ;0x3f...</string> Kerberos v5
- <string>;DisabledUser;;ShadowHash;</string> Disabled (prevents any authentication, account is disabled)
Also, Inside
<string>;Kerberosv5;;<user>@LKDC:SHA1.<hexadecimal string>;LKDC:SHA1.
Notice the <user> is associated to an Universally Unique IDentifier (UUID)
According to *man uuidgen*:
The UUID is printed to standard output as a hyphen-punctuated ASCII
string of the form: EEF45689-BBE5-4FB6-9E80-41B78F6578E2 (in printf(3)
format "%08X-%04X-%04X-%04X-%012X") [...]
Finally, this directory seems like the deprecated /etc/passwd file (Note that /etc/passwd is still used in single user mode), where xml plist files (newschool side) are lines (oldschool side). In the same manner (oldschool, newschool, you should have better stay at school ;)), the shadowed passwords are not stored in /etc/shadow by lines, but by files in /var/db/shadow/hash/ directory.
For your information, root account UUID is fixed to FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000. Not sure it can and/or should be changed.
/var/db/dslocal/nodes/Default/group/
This directory contains many plist files related to available and private groups. The filename is related to the respective group name.
(please add text)
/var/db/shadow/hash/
This directory is populated with two kinds of file.
- An optional
/var/db/shadown/hash/<uuid>.state, a binary plist which can be converted with plutil (is it available for Darwin ??). This file is created when it doesn’t exist and while corresponding user logs in. See inside:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CreationDate</key>
> >
<key>FailedLoginCount</key>
> >
<key>LastLoginDate</key>
> >
<key>NewPasswordRequired</key>
> >
</dict>
</plist>
- A shadow file /var/db/shadown/hash/{uuid}, named according to the corresponding UUID found in /var/db/dslocal/Default/nodes/users/{user}.plist. One line of 620 bytes with around 96% of 0…
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000salt:4bytessha1:20bytes0000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000
The orange part corresponds to the LANMAN (NTLM) password (32 bytes). The blue part is reserved for “unsalted” SHA1 digest (20 bytes). The green part is for md5 hash, another power of 2 (32 bytes). The salt:4bytessha1:20bytes (24 bytes) is composed of a salt and a corresponding hash generated from this salt and given password:
- The salt is easy to generate or can be choosen freely. Remember to use uppercase letters (it seems lowercase are not expected leading to login fail).
openssl rand 4 | xxd -p | tr ’ a-z’ ’ A-Z’
1E677D44
- The SHA1 hash, based on digest with provided password can be generated via openssl. Notice the salt must be passed as a binary data. Also do not forget to use uppercase letters.
HEX_SALT=
openssl rand 4 | xxd -p | tr ' a-z' ' A-Z'BIN_SALT=
echo -n ${HEX_SALT} | xxd -r -pSHA_HASH=
printf "%s%s" ${BIN_SALT} "<password>"} | openssl dgst -sha1 | tr ' a-z' ' A-Z'echo ${HEX_SALT}$
1E677D44EE801D51CE90C5E845E232809FDB22FFF600F409
Most of the following content (
Notes: It seems random UUID is allowed.
Command line tool: dscl
The dscl ** (Directory Service Command Line) tool is used in Darwin to manage users. dscl is part of the Darwin project DSTools. dscl is now (mostly) usable in a PureDarwin environment using the latest PureFoundation.root. (Not every option has been explored yet, so use may result in unpredictable results.)
passwd tool
So classic.
Caution: If root account is disabled, using *passwd root* will enable it, leading to potential security flaw (see Armoring PureDarwin page).
PAM
PAM (“Pluggable Authentication Modules”, contained in the projects pam and pam_modules is required for a working login. PAM is what verifies the username and password at login time. If both are mising, you get an error about libpam missing when you try to log in. If only pam_modules is missing, then you get a “Login:” prompt but no “Password:” prompt, instead you get immediately “Login incorrect” (without getting a chance of entering the password at all). F.A.Q.
How to generate an Universally Unique IDentifier (UUID)?
A 16bytes generic UUID (4bytes-2bytes-2bytes-2bytes-6bytes):
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
uuidgen
/usr/bin/uuidgen is available on Mac OS X. Example:
# uuidgen
C30B3EB3-DAEB-487B-A5B7-B1A023A85593
openssl && xdd
Entropy is provided by OpenSSL engine. xdd is used in order to get a plain hexdump.
Example:
GENERATED_UUID``="openssl rand 4 | xxd -p-openssl rand 2 | xxd -p-openssl rand 2 | xxd -p-openssl rand 2 | xxd -p-openssl rand 6 | xxd -p"
echo $GENERATED_UUID
f2bfd9bc-5c06-a572-5bc9-a1be9e081fd8
by hand
Remember to only use base 16 (hexadecimal) values (0..9 and A..F).
Example:
1ee7c0de-feed-dead-beef-c0ffeeeeeeee
root UUID
As said above, the root UUID is fixed to FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000.
You shoudn’t use another UUID for root account though (not yet tested) it could work.
How to create or modify any user?
There are several ways to create or modify user, including these ones:
- Use dscl (if available && no licence conflict) by hands, assuming you know how to use it and what you’re doing.
- Use pd_adduser script, a front-end of dscl, inspired by the original useradd script from OpenDarwin.
- Use pd_inject script, a similar front-end from PureDarwin which uses openssl as backend tool instead of dscl.
How to add an user to admin group?
In /var/db/dslocal/nodes/Default/groups/admin.plist, create a new string corresponding to the new preferential user like:
<key>users</key>
<array>
<string>root</string>
<string><user></string>
</array>
How to disable a specified user?
Add DisabledUser inside
How to delete a specified user?
(please add text)
rm /var/db/dslocal/Default/nodes/users/<user>.plist
rm /var/db/shadow/hash/<uuid>
rm /var/db/shadow/hash/<uuid>.state
rm -rf /Users/<user>
Also don’t forget to remove <user> from /var/db/dslocal/nodes/Default/groups/admin.plist group (if found inside).
About /etc/authorization
We can see in /Developer/Examples/Security/README:
[...] Note: The preferred way to modify the /etc/authorization file is to use
the Authorization APIs in <Security/AuthorizationDB.h>. This is always
how it should be done in shipping products, as there may have been other
modifications to the /etc/authorization file. A code snippet to do this
is:
#include <CoreFoundation/CoreFoundation.h>
#include <Security/AuthorizationDB.h>
[...]
if (status) exit(1);
}
Using the Smart Package Manager
Smart manages RPM packages on PureDarwin. This page describes how to use it.
What is smart
Smart is the tool you use to manage add-on software packages on PureDarwin. It can install, upgrade, and uninstall software packages and their dependencies using software repositories in the Internet.
Installing smart
Future versions of PureDarwin might come with smart preinstalled. Until that is true, you have to install smart and its dependencies from smart.mpkg.dmg to the PureDarwin volume using a Mac. Alternatively, mount the (uncompressed) smart.dmg on the PureDarwin system and install it with
cd / ; find /Volumes/smart*/smart-*.mpkg/Contents/Packages/*.pkg/Contents/Archive.pax.gz
-print -exec pax -z -f {} ;
(not recommended for end users).
Smart and its dependencies need both Python 2.4 (comes with smart.mpkg) and Python 2.5 (is expected to come with the base system, but is missing from Darwin and hence needs to be installed from MacPorts). To be fixed
Setting up smart
Future versions of PureDarwin might come with smart preconfigured. Until that is true, do the following to set up the PureDarwin repository:
PYTHONPATH=/opt/local/lib/python2.5/site-packages/smart/backends/: /opt/local/lib/python2.4/site-packages/:/opt/local/lib/python2.5/site-packages/:$PYTHONPATH /opt/local/bin/python2.4 /opt/local/bin/smart channel –add PureDarwin type=rpm-md baseurl=http://xref.puredarwin.org/macports/RPMS/i386/
PYTHONPATH=/opt/local/lib/python2.4/site-packages/:/opt/local/lib/python2.5/site-packages/:$PYTHONPATH /opt/local/bin/python2.4 /opt/local/bin/smart update
(…)
Alias: PureDarwin Type: rpm-md Base URL: http://xref.puredarwin.org/macports/RPMS/i386/
Include this channel? (y/N): y
from crpmver import *
When we use Python 2.5 it’s the other way around:
``
import zlib
Note that this needs a working network, which is not yet in PureDarwin. Hence this should work in a chroot only, but even there it doesn’t… How to fix this?
Using smart
What follows are the most commonly used operations in smart. See smart --help for more information.
Currently smart must be invoked with
PYTHONPATH=/opt/local/lib/python2.4/site-packages/:/opt/local/lib/python2.5/site-packages/:$PYTHONPATH /opt/local/bin/python2.4 /opt/local/bin/smart
This needs to be fixed.
Installing a package
To install vim:
PYTHONPATH=/opt/local/lib/python2.4/site-packages/:/opt/local/lib/python2.5/site-packages/:$PYTHONPATH /opt/local/bin/python2.4 /opt/local/bin/smart install vim
vim should now be installed in /opt/local/bin/vim.
Removing a package
To remove vim:
PYTHONPATH=/opt/local/lib/python2.4/site-packages/:/opt/local/lib/python2.5/site-packages/:$PYTHONPATH /opt/local/bin/python2.4 /opt/local/bin/smart remove vim
References
Versions
| Version | OS X Version | Name | Build | XNU |
|---|---|---|---|---|
| 9.6.0 | 10.5.6 | Leopard | 9G55 | 1228.9.59 |
| 9.5.0 | 10.5.5 | Leopard | 9F33 | 1228.7.58 |
| 9.4.0 | 10.5.4 | Leopard | 9E+17 | 1228.5.20 |
| 9.3.0 | 10.5.3 | Leopard | 9D34 | 1228.5.18 |
| 9.2.2 | 10.5.2.2 | Leopard | 9C7010 | 1228.4.31 |
| 9.2 | 10.5.2 | Leopard | 9C31 | 1228.3.13 |
| 9.1 | 10.5.1 | Leopard | 9B21 | 1228.0.2 |
| 9.0 | 10.5 | Leopard | 9A581 | 1228 |
| 8.11.0 | 10.4.11 | Tiger | 8S165 | 792.24.17 |
| 8.0.1 | 10.4 | Tiger | ||
| 7.0.1 | 10.3 | Panther | ||
| 6.0.2 | 10.2 | Jaguar | ||
| 1.4.1 | 10.1 | Puma | ||
| 1.3.1 | 10.0 | Cheetah | ||
| 1.2.1 | Public Beta | |||
| 1.0.2 | Developer Preview 4 | |||
| 10.0 | 10.6 | Snow Leopard |
For a more detailed list, see the Apple Museum.
vm_stat
Mach virtual memory statistics. This page is a placeholder. If you know something about the meaning of these values, please add some explanation here.
Xfce
“Xfce is a lightweight desktop environment for various *NIX systems. Designed for productivity, it loads and executes applications fast, while conserving system resources.” - Olivier Fourdan, creator of Xfce
The screenshot above shows Xfce compiled on a PureDarwin 9 system from MacPorts, using xfce4_axiom_theme and a background from psdgraphics.com.
Xfce can be launched so that it can be accessed by VNC clients.
Note: currently this appears to work only as the root user, needs to be investigated.
sudo Xvnc :0 -desktop X -alwaysshared -httpd /opt/local/share/vnc/classes
-geometry 800x600 -depth 24 -rfbwait 120000
-rfbauth /var/root/.vnc/passwd -rfbport 5900 &
xsetroot -gray
export DISPLAY=:0
sleep 1
sudo launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist
xfce4-session &
To be continued.
Credits
Thanks Anders F Björklund for his continuing support and bugfixes of Xfce in MacPorts.
PureDarwin Xmas
The PureDarwin project announces the immediate availability of “PureDarwin Xmas”, a developer preview of the upcoming operating system based on Apple’s Darwin 9 sources and other Open Source projects such as X11. At the same time, the PureDarwin project would like to invite the community to discuss, participate and contribute. The developer preview is available for download as a pre-configured virtual machine for VMware Fusion 2.0 on Macintosh, and the code used to generate it is available in a Subversion repository.
Darwin is the Open Source operating system from Apple that forms the basis for Mac OS X, 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 bootable ISO of Darwin 9.x (the version that corresponds to 10.5.x Leopard). Another goal of this project is to provide additional documentation. More…
Download
- XZ-compressed TAR archive (hosted on Google Code) - SHA-1 checksum:
80f88f44cc540ea05aa847bb18b94bdd133b6c07 - BZip2-compressed TAR archive (hosted on XRef) - MD5 checksum:
fd0ade4da224475e5dc33c2c11d9d0bc
VMware Fusion 2 virtual machine or VirtualBox
Showcase
This is expected to work.
with VMware
- Darwin 9 boots in a VMware Fusion 2 virtual machine on a Macintosh
- DTrace
- X11
- ZFS
with VirtualBox
- see VirtualBox
A screencast demonstrating some of Xmas’s functionality is available on Google Video.
Known issues
These issues will be addressed in future releases.
- Works with VMware Fusion 2 on Macintosh, VirtualBox on Linux
- login does not work, user is working as root
- Lots of error messages during the boot process
- X11 does not work with mach_kernel.voodoo
- WindowMaker will not be the default WM
- halt doesn’t work reliably, “shutdown -h now” doesn’t work reliably
- /var/log gets filled quickly
- No network
- Due to a restriction of VMware Fusion 2.0.1, you cannot run PureDarwin Xmas on 32-bit CPUs such as the Core Duo in the first-generation Intel Macs (Thanks gireesh). However, you can downgrade to VMware Fusion 2.0.0 which seems to run Darwin fine on a 32-bit CPU (thanks Stuart).
Want to help us on these? Check out the code from svn or hg repository and start hacking…
Frequently asked questions
-
What is PureDarwin Xmas? This is a developer preview to get people interested in PureDarwin and to attract developers. It is intended to run on VMware Fusion 2 on Macintosh. We call this developer preview “Xmas” because it contains X11, and after all it’s Christmas time.
-
Is this close to what the final PureDarwin will be? Not at all. It is just a proof-of-concept to show that Darwin 9 is alive.
-
Is this an Apple product? No. Darwin is an upstream project from Apple, but the PureDarwin project is not affiliated with Apple. We pay attention to follow any Apple and third-party licenses closely, though.
-
Which license is this under? This is a distribution that packages various individual parts. What the PureDarwin project has done from scratch is generally licensed under the new BSD license. However, most parts come from upstream (Apple and third-party) projects and are licensed under their respective licenses, such as the APSL, the Apple Driver License, the GPL, and others.
-
Where are the sources? Sources for Darwin can be found at http://opensource.apple.com and http://darwinbuild.macosforge.org/, sources for third-party software can be found at http://www.macports.org/, and sources from the PureDarwin project migrated from can now be found here: http://github.com/PureDarwin/PureDarwin http://code.google.com/p/puredarwin/source/checkout
-
How do I contact the PureDarwin project? We are on #puredarwin on irc.freenode.net most of the time, and this is our preferred communications channel. We also read the Darwin mailing lists, especially darwin-dev and darwinbuild-dev.
Screenshots
News
This category contains an archive of announcements and release notes from the early days of the PureDarwin project.
Darwin XNU kernel patches released by Voodoo Labs
The Open Source community around Darwin is picking up momentum: today, the Xnu-Dev project has released a set of patches for the XNU kernel that powers Mac OS X and other Darwin-based operating systems. The patches greatly broaden hardware support of the XNU kernel, allowing it to run on Pentium M, Pentium 4, Turion 64, Athlon 64 and Phenom. Like the XNU kernel itself, the patches are released under the Apple Public Source License (APSL), which makes them suitable for inclusion in Darwin-based distributions like the one the PureDarwin project is working on.
Darwin is the Open Source foundation of Mac OS X. Voodoo Labs is a group of contributors who work on the source of the XNU kernel, the core of Darwin. PureDarwin is a project to make Darwin more usable by providing installation media, documentation and add-on software.
For more information on the XNU kernel patches, see http://code.google.com/p/xnu-dev/ and http://groups.google.com/group/xnu-dev.
Generic platform kext for PureDarwin
Reader Rafirafi sent us source code for a new kext, ClockRTC, and patches that make it possible to use Apple8259PIC-6, AppleI386GenericPlatform-5, AppleI386PCI-6 with PureDarwin on generic hardware (only tested on QEMU). He thinks this will be useful for people who are interested in running Darwin without proprietary kexts. Note, however, that this is not a full ACPI platform kext and it will likely only work on QEMU.
GenericPlatform-10 is available at https://github.com/PureDarwin/LegacyDownloads/releases/tag/GPKE10
Networking comes to PureDarwin Xmas
It is now possible to add networking to the PureDarwin Xmas VMWare image (and possibly any other Darwin installation). See the Network page for full details.
New PureDarwin 1.3 beta release
Hi everyone. Thanks to the work of rafirafi, there is a new beta release of PureDarwin which is available for testing. This has yet to be completely verified or replicated (rebuilt from source code, and free licenses verified) by anyone else, but it does boot in QEMU and other virtual machines.
Rafirafi has rewritten the remaining binary roots of Darwin 9, including a completely new platform expert called GenericPlatform. He says that there is complete network support including DNS, via his ported E1000 and pcnet32 drivers. It has the latest MacPorts and OpenDirectory. The user’s password is ‘darwin’ and ‘sudo’ is activated. The documentation for this build is located in the default home directory, which you’ll see upon booting. The image is in the form of a qemu qcow2 image, which can be used or converted by various virtual machines.
Download
Google Drive at 1139081216 bytes: https://docs.google.com/open?id=0B27s590NKd-YVmxBdWZyOGtoN1E
Recompressed at 1036042200 bytes: http://smuckola.org/projects/puredarwin/puredarwin_1.3.0.qcow2.xz
SourceForge: https://sourceforge.net/projects/puredarwin/files/2012/Puredarwin-darwin_9.8-version_9L30.qcow2.xz/download
Running
I am using the following command for QEMU 1.2.0, installed via MacPorts, on a Mac OS 10.8.0 host.
qemu-system-i386 -m 1024 -cpu core2duo -vga std -net user -net nic -hda puredarwin_1.3.0.qcow2
You’ll arrive at an X11 display with a terminal window. The user’s password is ‘darwin’, which you’ll need for enabling DHCP networking.
sudo ipconfig set en1 BOOTP
See the default user’s home directory for the source code patches. Use port sync instead of port selfupdate, because MacPorts has to be patched in order to function, but you can still install the latest packages anyway. Some MacPorts packages (such as python27) require further patches, which are documented on trac.macports.org.
Please come to IRC (#puredarwin at irc.freenode.net, where I’m ‘dtm’) to discuss your findings and to give rafirafi your thanks!
Release notes
Date: 25/09/2012
Author: rafirafi
About this build:
Platform: leopard 9L30
Only i386 architecture
How to use:
There is an user created with username “puredarwin” and password “darwin”, and “root” has the password “rootroot”.
Network is tested as working in VirtualBox under Linux with KVM modules patch available on puredarwin.org site, from here you can connect with ssh.
Example of a complete command line:
kvm -m 512 -cpu host,family=6,model=15 -device VGA,bus=pci.0,addr=0x02 -device rtl8139,mac=54:52:03:04:05:02,vlan=0,bus=pci.0,addr=0x04 -net users,vlan=0 -machine pc,accel=kvm -name PD-XMAS-9L30pd1 -hda /opt/PD-Xmas-9L30pd1.qcow2
Edit: See below for running in VirtualBox.
What it is:
This is an attempt to have PureDarwin fully compiled from source.
Made with the information publicly available about the PureDarwin project with the maximum of features and developer tools I have been able to include.
- based on 10.5.8 source
- use the last opensource platform expert, only i386
Packages not coming from 9L30 Apple source with PureDarwin patches:
From rafirafi:
- ClockRTC.kext: Read the date from rtc and provide it to the platform expert
- VMQemuVGA.kext: a framebuffer for the qemu default vga, should be compatible with any card supporting the VBE standard.
- PCNet: an experimental driver for the pcnet32 network card, only version Am79C970A supported.
From Darwin 8:
- IOATABlockStorage.kext
- IOSCSIArchitectureModelFamily.kext
- AppleAPIC.kext with 8259 support: made standalone in Apple8259PIC.kext
- AppleI386GenericPlatform.kext: hook to ClockRTC added. Add the kernel boot option “platform=PCx86” for compatibility or Apple ACPI platform will be loaded.
- AppleI386PCI.kext
- DarwinTools: provide sw_vers and SystemVersion.plist
- CFNetwork: not so much tested
From BSD:
- logger
From Zenith432 / VMware:
- VMMouse.kext
From Stuart Crook:
- purefoundation
- pam_sessioncreate.so: Cf http://marc.info/?l=launchd-dev&m=123732227520735
From opencflite:
- CF: missing function, essentially Stuart Crook code.
From voodooprojects:
- chameleon: last version building with darwin 9, svn version 2045, need 400M of memory min. to boot.
From macports:
- a macports fresh install of the last version is here (compiled zithout objc and foundation support)
- Xorg is installed for convenience, if you don’t want it erase /usr/X* directory and modify .profile file.
From cauldrondevelopment:
- osxbom: for now just lsbom, a reimplementation of the utility of the same name. Here for using with macport binary package.
From hnak:
- AppleIntelE1000.kext : driver for the e1000 netwok family cards (http://osx86drivers.sourceforge.net ), slightly corrected to work with puredarwin.
Others:
- subversion-1.3.2 is in /Users/puredarwin.
- A part of jre from OpenJDK is here with ANTLR 2.7.3.
Components not working / lacking:
PureFoundation: there are (…) features not implemented, tested.
Security framework: there is no free CSP, so a lot of features are not ok. https://opensource.apple.com/source/Security/Security-55163.44/doc/AppleCSP.doc
CFNetwork: not really tested, perhaps it’s ok.
CF: the patches are mainly stubs, but it should be possible to implement the features without too much difficulties.
ddistnoted: not here. You can get the binary from the PureDarwin site or ask the author for the source.
Kerberos: depends on plutil. A python module for plist exist so somebody can make a plutil substitute.
Features with less problems:
Login through pam: this is achieved by creating/recreating the pam_sessioncreate.so module following the Stuart mail from http://lists.macosforge.org/pipermail/launchd-dev/2009-March.txt
Multi-users: you can use the script from PureDarwin site
DTrace: the dtrace patch interfers with dyld build, so I patched ld64 but dtrace functionalities were not tested after this patch.
You can see a message at boot: “InterfaceNamer: no network interfaces” => it just means the interface is not built-in, so not used to generate uuid platform.
Only a framebuffer for QEMU/VirtualBox is here, it’s based on VBE features only iirc, so nothing hardware specific.
There is a driver made by zenith432 VMWare Svga II which should provide support for VMWare.
What’s been done:
A lot of patches. But there is a lot of patch to build only i386.
What I think could be solved:
The patch available for CF pf6 is not OK, and some feature were backported from CF-550 or opencflite. There is no reconstructed headers/headers based on the doc, so they couldn’t be included. But compilation against PureFoundation in PureDarwin is fine and shows you immediately what symbols are lacking.
The PureFoundation r30 needs minor corrections to be built in darwinbuild and have all the symbol defined (link to libffi…), notably the Foundation headers can be self-contained easily.
Python and Tcl needs additional patches to build completely in darwinbuild.
X: re-enable XDarwin feature.
What will be very difficult to solve:
There is no open source CSP, perhaps it’s possible to use OpenSSL…
Xcode dependency: it means porting every project to use a Makefile…
Running with VirtualBox
To run this on a Ubuntu i386 (32-bit) box with VirtualBox, do
sudo apt-get -y install qemu-utils
xz -v -d -k Puredarwin-darwin_9.8-version_9L30.qcow2.xz
qemu-img convert -O vdi /Puredarwin-darwin_9.8-version_9L30.qcow2 Puredarwin-darwin_9.8-version_9L30.vdi
VBoxManage createvm -name PD -ostype MacOS -basefolder . -register
VBoxManage modifyvm PD --cpus 1
VBoxManage modifyvm PD --pae on
VBoxManage modifyvm PD --acpi on --ioapic on
VBoxManage modifyvm PD --memory 512
VBoxManage modifyvm PD --usb off
VBoxManage modifyvm PD --chipset piix3 # ich9 is only for their UEFI implementation
VBoxManage modifyvm PD --firmware bios
VBoxManage storagectl PD --name "IDE Controller" --add ide --controller ICH6 --bootable on
VBoxManage storageattach PD --storagectl "IDE Controller" --port 0 --type hdd --device 0 --medium Puredarwin-darwin_9.8-version_9L30.vdi
VBoxManage modifyvm PD --natpf1 "guestssh,tcp,,2222,,22" # ssh 127.0.0.1:2222
VBoxManage startvm PD
Use it
rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist
rm /Library/Preferences/SystemConfiguration/com.apple.network.identification.plist
reboot
Should give a new NetworkInterfaces.plist and should get an IP address via DHCP from VirtualBox
sudo /usr/sbin/sshd
sudo ipconfig set en0 BOOTP
sudo ipconfig set en0 DHCP
Crashes if ich9 is set instead of piix3
PCnet32 driver for PureDarwin
Rafirafi launched the pcnet32-driver-for-puredarwin project to produce a kext driver for the PCnet Ethernet network card for PureDarwin/Darwin 9. This is a driver for the “PCnet/PCI II 79C970A” card found in QEMU and VirtualBox for a PureDarwin install.
Grab it while it is hot: https://code.google.com/p/pcnet32-driver-for-puredarwin/
PureDarwin 9 server up and running
A PureDarwin 9 server is up and running (in private, for now - see below).
We have created a custom PureDarwin 9 ISO with the scripts and tools from our repository as described here, installed networking, OpenSSH, Apache, MacPorts, Netatalk, configured Bonjour, even installed TightVNC for graphical applications… set up SpeedStep to save some power… all running nicely.
Thanks for everyone who has contributed toward making PureDarwin this viable.
At the moment we are looking for a co-location and hardware sponsor so that we can run a PureDarwin 9 server system 24/7 and make available its services publicly.
PureDarwin Nano 20091226 available for download
An updated version of PureDarwin Nano has been released. PureDarwin Nano is a minimal version of the Darwin 9 OS that boots into a working bash shell. PureDarwinNano_20091226.tar.bz2 contains a virtual machine for use with VMware (be sure to assign at least 350 MB RAM). It also contains an ISO that can be used on Intel hardware. You can download it here.
The PureDarwin project is continuing to work on a more complete release of PureDarwin.
PureDarwin Xmas Developer Preview receives warm welcome
“(…) Most of you will know that the underlying core set of components of Mac OS X and the iPhone operating system are released under the Apple Public Source License, an FSF-approved open source license. Few of you, however, will have actually used Darwin in any other form than Mac OS X or the iPhone OS. Despite numerous projects attempting so, Darwin has never gained any significant traction apart from Apple’s own interest. The PureDarwin project tries to rise from the ashes of the OpenDarwin project, and has just released a Christmas developer preview. (…)” http://osnews.com/story/20696/PureDarwin_Xmas_Developer_Preview_Released
“(…) Being a developer preview, functionality is limited. Most obvious is the lack of networking and user accounts, both of which appear to rely heavily on closed source portions of OS X. However, given the mess that the Darwin code was in as released by Apple; many individual projects would simply not compile, and many of those which did were beset by dependency problems to the point where they were unusable; it is hard to overstate what an amazing job the team has done getting to this stage. The Darwin kernel now boots and launches an X session; the choice of the NeXT-like WindowMaker window manager is a nice touch, although apparently won’t be the future default; from where the few bundled X applications can be run. It’s still early days yet, but there’s every reason to feel enthusiastic about the future of the PureDarwin project.” http://www.appleeclectic.com/?p=1698
“(…) The PureDarwin project announces the immediate availability of PureDarwin Xmas, a developer preview of the upcoming operating system based on Apple’s Darwin 9 sources and other Open Source projects such as X11. At the same time, the PureDarwin project would like to invite the community to discuss, participate and contribute. (…)” http://osrevolution.com/2008/12/26/puredarwin-xmas/
“Le projet PureDarwin a annoncé la sortie de PureDarwin Xmas, une version développement de ce que sera le futur système d’exploitation basé sur les sources de Darwin 9 et d’autres projets open-source comme X11. Pour l’instant, le projet PureDarwin invite la communauté Ã discuter, participer et contribuer autour de ce projet. (…) http://www.quebecos.com/modules/news/article.php?storyid=3021
“(…) Die Xmas getaufte Developer Preview von PureDarwin steht als vorkonfigurierte virtuelle Maschine (VM) für VMware Fusion 2.0 unter MacOS X zum Download zur Verfügung. Der Quellcode findet sich in einem Subversion-Repository. Mit der Veröffentlichung ruft das PureDarwin-Team auch Interessierte zur Mithilfe auf, um die Entwicklung zu beschleunigen. Apples Open-Source-Unix Darwin ist die Basis von MacOS X. Das Open-Source-Gemeinschaftsprojekt PureDarwin hat es sich zur Aufgabe gemacht, Darwin nutzbarer zu machen und besser zu dokumentieren. Eines der Ziele ist es, ein bootbare ISO-Image von Darwin 9.x zur Verfügung zu stellen, das dem Unterbau von MacOS X 10.5.x (“Leopard”) ohne dessen Desktop entspricht. Von einigen wird PureDarwin als indirekter Nachfolger des gescheiterten OpenDarwin gesehen. (…)“ http://www.golem.de/0812/64301.html
“(…)” http://www.opennet.ru/opennews/art.shtml?num=19588
PureFoundation aims to become Foundation compatible substitute
PureFoundation is an attempt to create an open-source, binary compatible substitute for Apple’s closed-source Foundation framework. The foundation framework is an essential piece of Mac OS X and has lately also become a dependency of some Darwin projects.
PureFoundation developer Stuart Crook describes his new project as follows: In many ways it is similar to GNUStep Base (and may even share some of its code one day), but it differs in that it makes use of Apple’s own Objective-C 2.0 runtime and AutoZone Garbage Collector (a nice side effect of which is binary compatibility with Mac OS X.) The main purpose of PureFoundation is to get portions of Darwin up and running with as little patching of the original code as possible. Sometimes just having a framework in place called “Foundation” and identifying itself with the correct version strings is enough to spur recalcitrant apps into life. Many functions will be implemented by bridging to Apple’s CF-Lite. Many more will be provided thanks to GNUStep. However, it is unlikely PureFoundation will every replicate all aspects of Apple’s Foundation, and the project will certainly never stray into AppKit and beyond.
It is hoped that PureFoundation can be used to solve issues like DarwinBuild ticket #49.
For more information on PureFoundation, please see its homepage at http://www.hereapi.com/pf/
“Purity” patches for IOKitUser, launchd, objc4
Darwin community, as you might have experienced, the current published sources of some Darwin 9 projects, including such essential ones as IOKitUser, launchd, objc4 currently have build- or runtime dependencies on projects that are not part of Darwin.
It looks like patching the respective sources to remove the non-Darwin dependencies is the most pragmatic approach at this time. Hence, Aladin from the PureDarwin project has made available a series of patches.
Read the full post on the darwin-dev mailing list at http://lists.apple.com/archives/darwin-dev//2008/Oct/msg00132.html
“Purity” patches for MacPorts
Patches have been submitted to MacPorts to make portfiles more compatible with PureDarwin. See a list of them here: https://trac.macports.org/search?q=puredarwin.org
Thoughts on PureDarwin
Looks like the latest wave of publicity started with this mention on Theocacao:
“Visit PureDarwin.org for a few more of these gotchas and progress trying to get things working. Apple will fix these problems when people find them, so the more of us looking at the code the better.”
Followed a nice article mentioning the PureDarwin project: On the Origin of Mac Opensource on Apple Eclectic.
“I mention all this because Scott Steveson at the excellent Theocacao recently posted about Darwin. He is right when he says that access to the source code can be a massive boon to developers, but unfortunately overly optimistic when it comes to Darwin as a standalone alternative to Linux or BSD. Efforts to move in this direction are already being made by a group of enthusiasts over at PureDarwin. They already have a small VMWare image available to demonstrate their work.”
And we couldn’t agree more than with 0x783czar’s headline, The Return of the Coolest of All BSD Variants (Darwin OS).
“Though out of all forms of UNIX, my favorite branch is the BSD family, or Berkley Software Distribution. And my favorite branch of BSD is the Darwin Variant. This includes OSX, OSX Touch, and the Darwin Operating System. For some time now however. To get a bootable version of Standalone Darwin, you were mostly out of luck (…) But now I am happy to inform anyone who is interested that a new Darwin OS project has emerged. Called PureDarwin. This promises to be a great project and I encourage everyone who loves Darwin and Hexley, to check out this project and try out the Pre-Release: PureDarwin nano.”
Looks like some people are interested in Darwin indeed, also in Germany.
Also CocoaDev, a Mac OS X developer community.
But always keep in mind that the project isn’t even officially launched yet…
VMware image available
A VMware image containing an ISO of PureDarwin Nano has been released on the Downloads page.
X.Org for PureDarwin
When we started PureDarwin, it was not possible to run X.Org on it since support for native IOKit mode had been removed from its sources. This situation is changing now.
Guillaume Verdeau has released patches to get X.Org running on PureDarwin. He writes: “Hope it can help you and others. It’s now hard for me to find time to improve XDarwin so I give it to you!” Guillaume notes that there are some things that still need to be worked on, such as acceleration and the keyboard. To be able to build on PureDarwin you will need the old XDarwin keyboard routines that use NXKeymappings.
Sources are available on the PureDarwin download page (still waiting to be integrated into the build scripts in the repository - volunteers?).
XFree86 running on PureDarwin
We got XFree86 to compile on MacPorts using the “+puredarwin” variant and were able to run it on a PureDarwin 9 system. Today, our patches have been committed into MacPorts.










