Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Home

PureDarwin

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.

PureDarwin
    <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

News

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>


    </div>

    <div class="col-12 col-lg-8">
      <div class="text-center text-lg-end text-black">
        © 2024 Copyright PureDarwin / PD-Devs. All rights reserved.
        <br>
      </div>
    </div>
  </div>
  <div class="row">
    <div class="col-10 mx-auto text-center">
      <small>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
        <a href="https://opensource.apple.com/apsl/" target="_blank">Apple Public Source License (APSL)</a>.
        All other trademarks are the property of their respective owners.
        <br><br>
        Site Theme by <a href="https://github.com/kevdoy" target="_blank" class="text-dark">@KevDoy</a> on
        <a href="https://github.com/PureDarwin/puredarwin.github.io" class="text-dark" target="_blank">GitHub</a>.
      </small>
    </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

Libxpc/Launchd

PureFoundation

CoreFoundation

ddisnoted

DarwinBuild

Enoch Bootloader

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!

PureDarwin Discord

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

  1. AppleUSBAudio.root.tar.gz

All found here! http://src.macosforge.org/Roots/10A432/

Darwin 9: MacOSForge

  1. AppleACPIPlatform.root.tar.gz
  2. AppleRTC.root.tar.gz
  3. efiboot.root.tar.gz
  4. GraphicsDrivers.root.tar.gz

Darwin 8: darwinx86-801.iso

  1. ACard62xxM-4.tar.bz2
  2. ACard67162-2.tar.bz2
  3. ACard671xSCSI-4.tar.bz2
  4. ACard6885M-2.tar.bz2
  5. ACard68xxM-4.tar.bz2
  6. ATTOExpressPCI-204.tar.bz2
  7. Adaptec78XXSCSI-7.tar.bz2
  8. AdaptecBuiltDrivers-6.tar.bz2
  9. AirPortDriver2-350.5.tar.bz2
  10. AppleACPIPlatform-39.tar.bz2
  11. AppleBlower-104.0.1.tar.bz2
  12. AppleBroadcom570X-200.2.11.tar.bz2
  13. AppleCPUThermo-200.0.0.tar.bz2
  14. AppleFCU-132.2.0.tar.bz2
  15. AppleFPButton-105.0.1.tar.bz2
  16. AppleFWAudio-113.4.2.tar.bz2
  17. AppleFWOHCI-244.4.0.tar.bz2
  18. AppleGossamerPE-202.0.1.tar.bz2
  19. AppleHWClock-142.2.1.tar.bz2
  20. AppleI2SModemFamily-112.3.2.tar.bz2
  21. AppleIntel8254XEthernet-4.tar.bz2
  22. AppleLED-200.0.2.tar.bz2
  23. AppleLM87-105.0.1.tar.bz2
  24. AppleLMUController-121.3.2.tar.bz2
  25. AppleLynx-162.4.0.tar.bz2
  26. AppleMacRISC2PE-170.2.1.tar.bz2
  27. AppleMacRISC4PE-160.0.9.tar.bz2
  28. ApplePMU-220.0.1.tar.bz2
  29. AppleRTL8169Ethernet-1.tar.bz2
  30. AppleSEP-101.0.1.tar.bz2
  31. AppleSMU-106.0.3.tar.bz2
  32. AppleStorageDrivers-140.1.3.tar.bz2
  33. Apple_DEC21x4Ethernet-131.4.2.tar.bz2
  34. GraphicsDrivers-4.0.24.tar.bz2
  35. IOATABlockStorage-141.0.3.tar.bz2
  36. IOSCSIArchitectureModelFamily-140.1.7.tar.bz2

Darwin 6: darwinx86-602.iso

ls /Volumes/Darwinx86/System/Installation/apple_binary

  1. ACard62xxM.kext.tar.gz
  2. ACard671xSCSI.kext.tar.gz
  3. ACard68xxM.kext.tar.gz
  4. ATIRadeon.kext.tar.gz
  5. ATIRadeon8500.kext.tar.gz
  6. ATIRadeon8500DVDDriver.bundle.tar.gz
  7. ATIRadeon8500GA.plugin.tar.gz
  8. ATIRadeon8500GLDriver.bundle.tar.gz
  9. ATIRadeonDVDDriver.bundle.tar.gz
  10. ATIRadeonGA.plugin.tar.gz
  11. ATIRadeonGLDriver.bundle.tar.gz
  12. ATIRage128.kext.tar.gz
  13. ATIRage128DVDDriver.bundle.tar.gz
  14. ATIRage128GA.plugin.tar.gz
  15. ATIRage128GLDriver.bundle.tar.gz
  16. ATIRagePro.kext.tar.gz
  17. ATIRageProGA.plugin.tar.gz
  18. ATTOExpressPCI.kext.tar.gz
  19. Adaptec290X-2930.kext.tar.gz
  20. Adaptec29160x.kext.tar.gz
  21. Adaptec39160.kext.tar.gz
  22. Adaptec78XXSCSI.kext.tar.gz
  23. AppleAirPort.kext.tar.gz
  24. AppleAirPortFW.kext.tar.gz
  25. AppleAltiVecDVDDriver.bundle.tar.gz
  26. AppleBCM5701Ethernet.kext.tar.gz
  27. AppleCPUThermo.kext.tar.gz
  28. AppleCarolina.kext.tar.gz
  29. AppleCuda.kext.tar.gz
  30. AppleFPButton.kext.tar.gz
  31. AppleFWAudio.kext.tar.gz
  32. AppleFWOHCI.kext.tar.gz
  33. AppleFan.kext.tar.gz
  34. AppleGPIO.kext.tar.gz
  35. AppleGossamerPE.kext.tar.gz
  36. AppleHWClock.kext.tar.gz
  37. AppleKauaiATA.kext.tar.gz
  38. AppleKeyswitch.kext.tar.gz
  39. AppleKiwiATA.kext.tar.gz
  40. AppleKiwiRoot.kext.tar.gz
  41. AppleLED.kext.tar.gz
  42. AppleLM87.kext.tar.gz
  43. AppleLynx.kext.tar.gz
  44. AppleMIDIFWDriver.plugin.tar.gz
  45. AppleMIDISerialDriver.plugin.tar.gz
  46. AppleMIDIUSBDriver.plugin.tar.gz
  47. AppleMLANAudio.kext.tar.gz
  48. AppleNDRV.tar.gz
  49. AppleOnboardDisplay.kext.tar.gz
  50. ApplePCCard16ATA.kext.tar.gz
  51. ApplePCCardATA.kext.tar.gz
  52. ApplePMU.kext.tar.gz
  53. AppleRAID.kext.tar.gz
  54. AppleRS574Serial.kext.tar.gz
  55. AppleSCCIrDA.kext.tar.gz
  56. AppleStorageDrivers.kext.tar.gz
  57. AppleThermal.kext.tar.gz
  58. AppleUSBDisplays.kext.tar.gz
  59. AppleUSBIrDA.kext.tar.gz
  60. Apple_DEC21x4Ethernet.kext.tar.gz
  61. DCPModemSupport.kext.tar.gz
  62. GeForce2MX.kext.tar.gz
  63. GeForce2MXGA.plugin.tar.gz
  64. GeForce2MXGLDriver.bundle.tar.gz
  65. GeForce3.kext.tar.gz
  66. GeForce3GA.plugin.tar.gz
  67. GeForce3GLDriver.bundle.tar.gz
  68. I2CGPIO.kext.tar.gz
  69. ICAClassicNotSeizeDriver.kext.tar.gz
  70. ICAFWKodakProDriver.kext.tar.gz
  71. IOBluetoothFamily.kext.tar.gz
  72. IOHDIXController.kext.tar.gz
  73. IOSCSIParallelFamily.kext.tar.gz
  74. InternalModemSupport.kext.tar.gz
  75. InternalUSBModem.kext.tar.gz
  76. MacIOGPIO.kext.tar.gz
  77. NVDANV10Hal.kext.tar.gz
  78. NVDANV20Hal.kext.tar.gz
  79. NVDAResman.kext.tar.gz
  80. TRANS.TBL
  81. UltraTek100.kext.tar.gz
  82. UltraTek133.kext.tar.gz
  83. UltraTek33.kext.tar.gz
  84. UltraTek66.kext.tar.gz
  85. cddafs.kext.tar.gz
  86. 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
  • #puredarwinon irc.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.

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.

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.

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.

MacStadium

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 &gt; CF.symbols
nm -g CoreFoundation | grep -v  "U " | cut -d " " -f 3 &gt; CF-Lite.symbols

wc -l CF*.symbols 
    1287 CF-Lite.symbols
    1654 CF.symbols

diff CF.symbols CF-Lite.symbols | grep "^&lt; " |  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.

  1. $ld$hide$os10.4$.objc_class_name_NSArray
  2. $ld$hide$os10.4$.objc_class_name_NSCalendar
  3. $ld$hide$os10.4$.objc_class_name_NSData
  4. $ld$hide$os10.4$.objc_class_name_NSDate
  5. $ld$hide$os10.4$.objc_class_name_NSDateComponents
  6. $ld$hide$os10.4$.objc_class_name_NSDictionary
  7. $ld$hide$os10.4$.objc_class_name_NSEnumerator
  8. $ld$hide$os10.4$.objc_class_name_NSException
  9. $ld$hide$os10.4$.objc_class_name_NSInputStream
  10. $ld$hide$os10.4$.objc_class_name_NSInvocation
  11. $ld$hide$os10.4$.objc_class_name_NSLocale
  12. $ld$hide$os10.4$.objc_class_name_NSMethodSignature
  13. $ld$hide$os10.4$.objc_class_name_NSMutableArray
  14. $ld$hide$os10.4$.objc_class_name_NSMutableData
  15. $ld$hide$os10.4$.objc_class_name_NSMutableDictionary
  16. $ld$hide$os10.4$.objc_class_name_NSMutableSet
  17. $ld$hide$os10.4$.objc_class_name_NSNull
  18. $ld$hide$os10.4$.objc_class_name_NSObject
  19. $ld$hide$os10.4$.objc_class_name_NSOutputStream
  20. $ld$hide$os10.4$.objc_class_name_NSRunLoop
  21. $ld$hide$os10.4$.objc_class_name_NSSet
  22. $ld$hide$os10.4$.objc_class_name_NSStream
  23. $ld$hide$os10.4$.objc_class_name_NSTimeZone
  24. $ld$hide$os10.4$.objc_class_name_NSTimer
  25. $ld$hide$os10.4$.objc_class_name_NSUserDefaults
  26. $ld$hide$os10.4$_NSBuddhistCalendar
  27. $ld$hide$os10.4$_NSChineseCalendar
  28. $ld$hide$os10.4$_NSCurrentLocaleDidChangeNotification
  29. $ld$hide$os10.4$_NSDefaultRunLoopMode
  30. $ld$hide$os10.4$_NSGenericException
  31. $ld$hide$os10.4$_NSGetSizeAndAlignment
  32. $ld$hide$os10.4$_NSGregorianCalendar
  33. $ld$hide$os10.4$_NSHebrewCalendar
  34. $ld$hide$os10.4$_NSInternalInconsistencyException
  35. $ld$hide$os10.4$_NSInvalidArgumentException
  36. $ld$hide$os10.4$_NSIslamicCalendar
  37. $ld$hide$os10.4$_NSIslamicCivilCalendar
  38. $ld$hide$os10.4$_NSJapaneseCalendar
  39. $ld$hide$os10.4$_NSLocaleCalendar
  40. $ld$hide$os10.4$_NSLocaleCollationIdentifier
  41. $ld$hide$os10.4$_NSLocaleCountryCode
  42. $ld$hide$os10.4$_NSLocaleCurrencyCode
  43. $ld$hide$os10.4$_NSLocaleCurrencySymbol
  44. $ld$hide$os10.4$_NSLocaleDecimalSeparator
  45. $ld$hide$os10.4$_NSLocaleExemplarCharacterSet
  46. $ld$hide$os10.4$_NSLocaleGroupingSeparator
  47. $ld$hide$os10.4$_NSLocaleIdentifier
  48. $ld$hide$os10.4$_NSLocaleLanguageCode
  49. $ld$hide$os10.4$_NSLocaleMeasurementSystem
  50. $ld$hide$os10.4$_NSLocaleScriptCode
  51. $ld$hide$os10.4$_NSLocaleUsesMetricSystem
  52. $ld$hide$os10.4$_NSLocaleVariantCode
  53. $ld$hide$os10.4$_NSMallocException
  54. $ld$hide$os10.4$_NSRangeException
  55. $ld$hide$os10.4$_NSRunLoopCommonModes
  56. $ld$hide$os10.4$_NSStreamDataWrittenToMemoryStreamKey
  57. $ld$hide$os10.4$_NSStreamFileCurrentOffsetKey
  58. $ld$hide$os10.4$_NSStreamSOCKSProxyConfigurationKey
  59. $ld$hide$os10.4$_NSStreamSOCKSProxyHostKey
  60. $ld$hide$os10.4$_NSStreamSOCKSProxyPasswordKey
  61. $ld$hide$os10.4$_NSStreamSOCKSProxyPortKey
  62. $ld$hide$os10.4$_NSStreamSOCKSProxyUserKey
  63. $ld$hide$os10.4$_NSStreamSOCKSProxyVersion4
  64. $ld$hide$os10.4$_NSStreamSOCKSProxyVersion5
  65. $ld$hide$os10.4$_NSStreamSOCKSProxyVersionKey
  66. $ld$hide$os10.4$_NSStreamSocketSecurityLevelKey
  67. $ld$hide$os10.4$_NSStreamSocketSecurityLevelNegotiatedSSL
  68. $ld$hide$os10.4$_NSStreamSocketSecurityLevelNone
  69. $ld$hide$os10.4$_NSStreamSocketSecurityLevelSSLv2
  70. $ld$hide$os10.4$_NSStreamSocketSecurityLevelSSLv3
  71. $ld$hide$os10.4$_NSStreamSocketSecurityLevelTLSv1
  72. $ld$hide$os10.4$_NSSystemTimeZoneDidChangeNotification
  73. .objc_category_name_CFXPreferencesPropertyListSource_CFXPreferencesSPIAdditions
  74. .objc_class_name_CFXPreferencesCompatibilitySource
  75. .objc_class_name_CFXPreferencesManagedSource
  76. .objc_class_name_CFXPreferencesPropertyListSource
  77. .objc_class_name_CFXPreferencesSearchListSource
  78. .objc_class_name_CFXPreferencesSource
  79. .objc_class_name_NSArray
  80. .objc_class_name_NSCalendar
  81. .objc_class_name_NSData
  82. .objc_class_name_NSDate
  83. .objc_class_name_NSDateComponents
  84. .objc_class_name_NSDictionary
  85. .objc_class_name_NSEnumerator
  86. .objc_class_name_NSException
  87. .objc_class_name_NSInputStream
  88. .objc_class_name_NSInvocation
  89. .objc_class_name_NSLocale
  90. .objc_class_name_NSMessageBuilder
  91. .objc_class_name_NSMethodSignature
  92. .objc_class_name_NSMutableArray
  93. .objc_class_name_NSMutableData
  94. .objc_class_name_NSMutableDictionary
  95. .objc_class_name_NSMutableOrderedSet
  96. .objc_class_name_NSMutableSet
  97. .objc_class_name_NSNull
  98. .objc_class_name_NSObject
  99. .objc_class_name_NSOrderedSet
  100. .objc_class_name_NSOutputStream
  101. .objc_class_name_NSRunLoop
  102. .objc_class_name_NSSet
  103. .objc_class_name_NSStream
  104. .objc_class_name_NSTimeZone
  105. .objc_class_name_NSTimer
  106. .objc_class_name_NSUserDefaults
  107. .objc_class_name__NSZombie_
  108. .objc_class_name___NSArrayReverseEnumerator
  109. .objc_class_name___NSCFArray
  110. .objc_class_name___NSCFDate
  111. .objc_class_name___NSCFDictionary
  112. .objc_class_name___NSCFOrderedSet
  113. .objc_class_name___NSCFSet
  114. .objc_class_name___NSDictionaryObjectEnumerator
  115. .objc_class_name___NSFastEnumerationEnumerator
  116. .objc_class_name___NSOrderedSetReverseEnumerator
  117. .objc_class_name___NSPlaceholderArray
  118. .objc_class_name___NSPlaceholderDate
  119. .objc_class_name___NSPlaceholderDictionary
  120. .objc_class_name___NSPlaceholderOrderedSet
  121. .objc_class_name___NSPlaceholderSet
  122. _CFAttributedStringBeginEditing
  123. _CFAttributedStringCreate
  124. _CFAttributedStringCreateCopy
  125. _CFAttributedStringCreateMutable
  126. _CFAttributedStringCreateMutableCopy
  127. _CFAttributedStringCreateWithSubstring
  128. _CFAttributedStringEndEditing
  129. _CFAttributedStringGetAttribute
  130. _CFAttributedStringGetAttributeAndLongestEffectiveRange
  131. _CFAttributedStringGetAttributes
  132. _CFAttributedStringGetAttributesAndLongestEffectiveRange
  133. _CFAttributedStringGetLength
  134. _CFAttributedStringGetMutableString
  135. _CFAttributedStringGetString
  136. _CFAttributedStringGetTypeID
  137. _CFAttributedStringOpenUText
  138. _CFAttributedStringRemoveAttribute
  139. _CFAttributedStringReplaceAttributedString
  140. _CFAttributedStringReplaceString
  141. _CFAttributedStringSetAttribute
  142. _CFAttributedStringSetAttributes
  143. _CFBundleCloseBundleResourceMap
  144. _CFBundleOpenBundleResourceFiles
  145. _CFBundleOpenBundleResourceMap
  146. _CFFileDescriptorCreate
  147. _CFFileDescriptorCreateRunLoopSource
  148. _CFFileDescriptorDisableCallBacks
  149. _CFFileDescriptorEnableCallBacks
  150. _CFFileDescriptorGetContext
  151. _CFFileDescriptorGetNativeDescriptor
  152. _CFFileDescriptorGetTypeID
  153. _CFFileDescriptorInvalidate
  154. _CFFileDescriptorIsValid
  155. _CFGetExecutableLinkedLibraryVersion
  156. _CFGetExecutingLibraryVersion
  157. _CFLocaleGetLanguageRegionEncodingForLocaleIdentifier
  158. _CFLogTest
  159. _CFMutableAttributedStringOpenUText
  160. _CFMutableStringOpenUText
  161. _CFNotificationCenterAddObserver
  162. _CFNotificationCenterGetDarwinNotifyCenter
  163. _CFNotificationCenterGetDistributedCenter
  164. _CFNotificationCenterGetLocalCenter
  165. _CFNotificationCenterGetTypeID
  166. _CFNotificationCenterIsSuspended
  167. _CFNotificationCenterPostNotification
  168. _CFNotificationCenterPostNotificationWithOptions
  169. _CFNotificationCenterRemoveEveryObserver
  170. _CFNotificationCenterRemoveObserver
  171. _CFNotificationCenterSetSuspended
  172. _CFPasteboardApplyFunction
  173. _CFPasteboardBeginGeneration
  174. _CFPasteboardCopyData
  175. _CFPasteboardCopyFlavorsForItem
  176. _CFPasteboardCopyItemsAndFlavors
  177. _CFPasteboardCopyName
  178. _CFPasteboardCreate
  179. _CFPasteboardCreateDataForString
  180. _CFPasteboardCreateStringFromData
  181. _CFPasteboardCreateUnique
  182. _CFPasteboardGetChangeCount
  183. _CFPasteboardGetDataFlags
  184. _CFPasteboardGetFlavorCount
  185. _CFPasteboardGetGenerationCount
  186. _CFPasteboardGetItemAtIndex
  187. _CFPasteboardGetItemCount
  188. _CFPasteboardGetTypeID
  189. _CFPasteboardIsDataPromised
  190. _CFPasteboardPromiseData
  191. _CFPasteboardResolveAllPromisedData
  192. _CFPasteboardResolvePromisedData
  193. _CFPasteboardSetData
  194. _CFPasteboardSetDataFlags
  195. _CFPasteboardSetPasteLocation
  196. _CFPreferencesAppValueIsForced
  197. _CFRunArrayCreate
  198. _CFRunArrayDelete
  199. _CFRunArrayGetCount
  200. _CFRunArrayGetTypeID
  201. _CFRunArrayGetValueAtIndex
  202. _CFRunArrayGetValueAtRunArrayIndex
  203. _CFRunArrayInsert
  204. _CFRunArrayReplace
  205. _CFServiceControllerCanConnect
  206. _CFServiceControllerCopyServicesEntries
  207. _CFServiceControllerGetRegisteredProvider
  208. _CFServiceControllerPerformService
  209. _CFServiceControllerPromiseServiceEntries
  210. _CFServiceControllerRegisterProvider
  211. _CFServiceControllerSetServicesEntries
  212. _CFStreamCreateBoundPair
  213. _CFStringOpenUText
  214. _CFStringTokenizerAdvanceToNextToken
  215. _CFStringTokenizerCopyBestStringLanguage
  216. _CFStringTokenizerCopyCurrentTokenAttribute
  217. _CFStringTokenizerCreate
  218. _CFStringTokenizerGetCurrentSubTokens
  219. _CFStringTokenizerGetCurrentTokenRange
  220. _CFStringTokenizerGetTypeID
  221. _CFStringTokenizerGoToTokenAtIndex
  222. _CFStringTokenizerSetString
  223. _CFStringTransform
  224. _CFURLCreateFromFSRef
  225. _CFURLGetFSRef
  226. _CFUniCharApplyUnicodeBidiAlgorithm
  227. _CFUniCharGetBidiCategory
  228. _CFUniCharGetFirstBidiParagraphLength
  229. _NSBuddhistCalendar
  230. _NSChineseCalendar
  231. _NSCurrentLocaleDidChangeNotification
  232. _NSDefaultRunLoopMode
  233. _NSGenericException
  234. _NSGetSizeAndAlignment
  235. _NSGregorianCalendar
  236. _NSHebrewCalendar
  237. _NSInternalInconsistencyException
  238. _NSInvalidArgumentException
  239. _NSIslamicCalendar
  240. _NSIslamicCivilCalendar
  241. _NSJapaneseCalendar
  242. _NSLocaleCalendar
  243. _NSLocaleCollationIdentifier
  244. _NSLocaleCountryCode
  245. _NSLocaleCurrencyCode
  246. _NSLocaleCurrencySymbol
  247. _NSLocaleDecimalSeparator
  248. _NSLocaleExemplarCharacterSet
  249. _NSLocaleGroupingSeparator
  250. _NSLocaleIdentifier
  251. _NSLocaleLanguageCode
  252. _NSLocaleMeasurementSystem
  253. _NSLocaleScriptCode
  254. _NSLocaleUsesMetricSystem
  255. _NSLocaleVariantCode
  256. _NSMallocException
  257. _NSRangeException
  258. _NSRunLoopCommonModes
  259. _NSStreamDataWrittenToMemoryStreamKey
  260. _NSStreamFileCurrentOffsetKey
  261. _NSStreamSOCKSProxyConfigurationKey
  262. _NSStreamSOCKSProxyHostKey
  263. _NSStreamSOCKSProxyPasswordKey
  264. _NSStreamSOCKSProxyPortKey
  265. _NSStreamSOCKSProxyUserKey
  266. _NSStreamSOCKSProxyVersion4
  267. _NSStreamSOCKSProxyVersion5
  268. _NSStreamSOCKSProxyVersionKey
  269. _NSStreamSocketSecurityLevelKey
  270. _NSStreamSocketSecurityLevelNegotiatedSSL
  271. _NSStreamSocketSecurityLevelNone
  272. _NSStreamSocketSecurityLevelSSLv2
  273. _NSStreamSocketSecurityLevelSSLv3
  274. _NSStreamSocketSecurityLevelTLSv1
  275. _NSSystemTimeZoneDidChangeNotification
  276. __CFAppVersionCheck
  277. __CFAppVersionCheckLessThan
  278. __CFArrayIsMutable
  279. __CFAttributedStringCheckAndReplace
  280. __CFAttributedStringCheckAndReplaceAttributed
  281. __CFAttributedStringCheckAndSetAttribute
  282. __CFAttributedStringCheckAndSetAttributes
  283. __CFAttributedStringCreateWithRuns
  284. __CFAttributedStringGetLength
  285. __CFAttributedStringGetNumberOfRuns
  286. __CFAttributedStringGetRuns
  287. __CFAttributedStringIsMutable
  288. __CFBagIsMutable
  289. __CFBundleCloseBundleResourceFork
  290. __CFBundleCopyInfoDictionaryInResourceFork
  291. __CFBundleCreateIfMightBeBundle
  292. __CFBundleCreateWithExecutableURLIfMightBeBundle
  293. __CFBundleOpenBundleResourceFork
  294. __CFCharacterSetIsMutable
  295. __CFCreateURLFromFSSpec
  296. __CFDNStart
  297. __CFDictionaryIsMutable
  298. __CFDoExceptionOperation
  299. __CFGetFSSpecFromURL
  300. __CFLocaleGetNoteCount
  301. __CFLogvEx
  302. __CFNotificationCenterForLocalNotifications
  303. __CFPreferencesCopyValueNoCache
  304. __CFPreferencesCreatePathToUsersManagedPrefsDirectory
  305. __CFPreferencesIsManaged
  306. __CFPreferencesManagementStatusChangedForDomains
  307. __CFPreferencesPostValuesChangedInDomains
  308. __CFPreferencesWriteDomainDictionaryToPath
  309. __CFPreferencesWriteManagedDomainForUser
  310. __CFPropertListCreateFromFrozen
  311. __CFPropertyListCopyShared
  312. __CFPropertyListCreateFrozen
  313. __CFPropertyListShare
  314. __CFRunArrayCreateWithGuts
  315. __CFSetIsMutable
  316. __CFStringTokenizerGetDerivedTokens
  317. __CFStringTokenizerTokenize
  318. __CFStringTokenizerTokenizeCompoundWord
  319. __CFURLCopyAliasFromPropertyListRepresentation
  320. __CFURLCopyExtendedPropertyListPrimitive
  321. __CFURLCopyExtendedPropertyListRepresentation
  322. __CFUserNotificationSetWarningThread
  323. __CFXNotificationCenterCreate
  324. __CFXNotificationCenterIsEmpty
  325. __CFXNotificationGetHostCenter
  326. __CFXNotificationGetSuspended
  327. __CFXNotificationGetTaskCenter
  328. __CFXNotificationPost
  329. __CFXNotificationPostNotification
  330. __CFXNotificationRegister
  331. __CFXNotificationResetSessionForTask
  332. __CFXNotificationSetSuspended
  333. __CFXNotificationUnregister
  334. __CFXPreferencesCopyDictionaryForApplicationPreferences
  335. __CFXPreferencesCopyDictionaryForNamedVolatileSource
  336. __CFXPreferencesCopyDictionaryForSourceWithBundleID
  337. __CFXPreferencesCopyLanguageList
  338. __CFXPreferencesCopyVolatileSourceNames
  339. __CFXPreferencesRegisterDefaultValues
  340. __CFXPreferencesRemoveNamedVolatileSource
  341. __CFXPreferencesReplaceValuesInNamedVolatileSource
  342. __CFXPreferencesReplaceValuesInSourceWithBundleID
  343. __CFXPreferencesSetUserDefaultsPointer
  344. __CF_forwarding_prep_0
  345. __NSExceptionGetRubyToken
  346. __NSExceptionSetRubyToken
  347. __NSMessageBuilder
  348. ___CFAttributedStringCreateMutableWithSubstring
  349. ___CFAttributedStringMtbl
  350. ___CFDoExternRefOperation
  351. ___CFOAInitialize
  352. ___CFOASafe
  353. ___CFPBStart
  354. ___CFRecordAllocationEvent
  355. ___CFRuntimeObjCClassTable
  356. ___CFSetLastAllocationEventName
  357. ___CFStringIsMutable
  358. ___CFStringMtbl
  359. ____CFA2UC
  360. _crashreporter_info
  361. __kCFBundleResourceSpecificationKey
  362. _kCFErrorDomainCoreFoundation
  363. _kCFManagedPreferencesMCXNotificationName
  364. _kCFManagedPreferencesMCXObjectName
  365. _kCFNotificationAnyName
  366. _kCFNotificationAnyObject
  367. _kCFPasteboardFind
  368. _kCFPasteboardGeneral
  369. _kCFPreferencesDidChangeNotificationName
  370. _kCFPreferencesDidChangeObject
  371. _kCFServiceControllerActivateKey
  372. _kCFServiceControllerErrorKey
  373. _kCFServiceControllerMessageKey
  374. _kCFServiceControllerPasteboardKey
  375. _kCFServiceControllerProviderKey
  376. _kCFServiceControllerResultKey
  377. _kCFServiceControllerServicesChangedNotification
  378. _kCFServiceControllerUserDataKey
  379. _kCFStringTransformFullwidthHalfwidth
  380. _kCFStringTransformHiraganaKatakana
  381. _kCFStringTransformLatinArabic
  382. _kCFStringTransformLatinCyrillic
  383. _kCFStringTransformLatinGreek
  384. _kCFStringTransformLatinHangul
  385. _kCFStringTransformLatinHebrew
  386. _kCFStringTransformLatinHiragana
  387. _kCFStringTransformLatinKatakana
  388. _kCFStringTransformLatinThai
  389. _kCFStringTransformMandarinLatin
  390. _kCFStringTransformStripCombiningMarks
  391. _kCFStringTransformStripDiacritics
  392. _kCFStringTransformToLatin
  393. _kCFStringTransformToUnicodeName
  394. _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:

  1. _CFArrayGetTypeID
  2. _CFArrayCreateMutable
  3. __CFArrayCreate_ex
  4. _CFArrayContainsValue
  5. _CFArrayGetValueAtIndex
  6. _CFArrayGetValues
  7. _CFArrayApplyFunction
  8. _CFArrayAppendValue
  9. _CFArraySetValueAtIndex
  10. _CFArrayExchangeValuesAtIndices
  11. _CFArrayRemoveValueAtIndex
  12. __CFArraySetCapacity
  13. __CFArrayIsMutable
  14. _CFArrayBSearchValues
  15. _CFArrayAppendArray
  16. _CFBagGetTypeID
  17. _CFBagCreateMutable
  18. __CFBagSetContext
  19. _CFBagContainsValue
  20. _CFBagApplyFunction
  21. __CFBagSetCapacity
  22. _CFBagAddValue
  23. _CFBagRemoveValue
  24. _CFBagRemoveAllValues
  25. ___CFRangeMake
  26. _CFNullGetTypeID
  27. _CFAllocatorGetTypeID
  28. _CFAllocatorGetDefault
  29. _CFAllocatorSetDefault
  30. _CFAllocatorCreate
  31. _CFAllocatorAllocate
  32. _CFAllocatorReallocate
  33. _CFAllocatorDeallocate
  34. _CFAllocatorGetPreferredSizeForSize
  35. _CFAllocatorGetContext
  36. __CFRuntimeSetCFMPresent
  37. _CFBinaryHeapGetTypeID
  38. _CFBinaryHeapContainsValue
  39. _CFBinaryHeapApplyFunction
  40. _CFBinaryHeapAddValue
  41. _CFBinaryHeapRemoveMinimumValue
  42. __CFKeyedArchiverUIDGetTypeID
  43. __CFKeyedArchiverUIDCreate
  44. __CFKeyedArchiverUIDGetValue
  45. ___CFBinaryPlistWriteToStream
  46. ___CFBinaryPlistGetTopLevelInfo
  47. ___CFBinaryPlistGetOffsetForValueFromArray
  48. ___CFBinaryPlistGetOffsetForValueFromDictionary
  49. ___CFBinaryPlistCreateObject
  50. _CFBitVectorGetTypeID
  51. _CFBitVectorCreateMutable
  52. _CFBitVectorGetCount
  53. _CFBitVectorGetCountOfBit
  54. _CFBitVectorContainsBit
  55. _CFBitVectorSetCount
  56. _CFBitVectorFlipBitAtIndex
  57. _CFBitVectorFlipBits
  58. _CFBitVectorSetAllBits
  59. _CFStringEncodingIsValidCombiningCharacterForLatin1
  60. _CFStringEncodingPrecomposeLatinCharacter
  61. __CFBundleCopyBundleURLForExecutableURL
  62. __CFBundleCreateIfLooksLikeBundle
  63. __CFBundleGetMainBundleIfLooksLikeBundle
  64. __CFBundleCreateWithExecutableURLIfLooksLikeBundle
  65. _CFBundleGetMainBundle
  66. _CFBundleGetBundleWithIdentifier
  67. _CFBundleGetTypeID
  68. _CFBundleCreate
  69. _CFBundleCreateBundlesFromDirectory
  70. __CFBundleSetDefaultLocalization
  71. _CFBundleCopyInfoDictionaryInDirectory
  72. _CFBundleGetInfoDictionary
  73. __CFBundleGetLocalInfoDictionary
  74. _CFBundleGetLocalInfoDictionary
  75. __CFBundleGetValueForInfoKey
  76. _CFBundleGetValueForInfoDictionaryKey
  77. _CFBundleGetIdentifier
  78. _CFBundleGetVersionNumber
  79. _CFBundleGetDevelopmentRegion
  80. __CFBundleGetHasChanged
  81. _CFBundleCopySupportFilesDirectoryURL
  82. _CFBundleCopyResourcesDirectoryURL
  83. __CFBundleCopyResourceForkURL
  84. __CFBundleCopyExecutableURLInDirectory
  85. __CFBundleCopyOtherExecutableURLInDirectory
  86. _CFBundleCopyAuxiliaryExecutableURL
  87. _CFBundleIsExecutableLoaded
  88. __CFBundleCopyFileTypeForFileURL
  89. __CFBundleSetCFMConnectionID
  90. _CFBundleLoadExecutable
  91. _CFBundleUnloadExecutable
  92. _CFBundleGetFunctionPointerForName
  93. __CFBundleGetCFMFunctionPointerForName
  94. _CFBundleGetFunctionPointersForNames
  95. __CFBundleGetCFMFunctionPointersForNames
  96. _CFBundleGetDataPointerForName
  97. _CFBundleGetDataPointersForNames
  98. _CFBundleGetPlugIn
  99. _CFBundleGetAllBundles
  100. __CFBundleLayoutVersion
  101. __CFBundleCopyInfoPlistURL
  102. __CFBundleCopyPrivateFrameworksURL
  103. __CFBundleCopySharedFrameworksURL
  104. _CFBundleCopySharedFrameworksURL
  105. __CFBundleCopySharedSupportURL
  106. _CFBundleCopySharedSupportURL
  107. _CFBundleCopyBuiltInPlugInsURL
  108. __CFBundleFlushCaches
  109. __CFFindBundleResources
  110. _CFBundleCopyResourceURLsOfType
  111. __CFBundleCopyResourceURLForLanguage
  112. __CFBundleCopyResourceURLsOfTypeForLanguage
  113. _CFBundleCopyResourceURLsOfTypeForLocalization
  114. _CFBundleCopyLocalizedString
  115. _CFBundleCopyLocalizationForLocalizationInfo
  116. __CFBundleGetLanguageAndRegionCodes
  117. _CFBundleCopyLocalizationsForPreferences
  118. _CFBundleCopyPreferredLocalizationsFromArray
  119. __CFBundleURLLooksLikeBundle
  120. __CFBundleGetPackageInfoInDirectory
  121. _CFBundleCopyBundleLocalizations
  122. _CFBundleCopyInfoDictionaryForURL
  123. _CFBundleCopyLocalizationsForURL
  124. _CFCharacterSetGetTypeID
  125. _CFCharacterSetGetPredefined
  126. _CFCharacterSetCreateWithCharactersInRange
  127. _CFCharacterSetCreateWithCharactersInString
  128. _CFCharacterSetCreateWithBitmapRepresentation
  129. _CFCharacterSetIsSurrogatePairMember
  130. _CFCharacterSetHasMemberInPlane
  131. _CFCharacterSetCreateBitmapRepresentation
  132. _CFCharacterSetAddCharactersInRange
  133. _CFCharacterSetAddCharactersInString
  134. _CFCharacterSetIntersect
  135. _CFCharacterSetInvert
  136. _CFCharacterSetCompact
  137. _CFCharacterSetFast
  138. __CFCharacterSetGetKeyedCodingType
  139. __CFCharacterSetIsMutable
  140. __CFCharacterSetGetKeyedCodingBuiltinType
  141. __CFCharacterSetGetKeyedCodingRange
  142. __CFCharacterSetCreateKeyedCodingString
  143. __CFCharacterSetIsInverted
  144. __CFCharacterSetSetIsInverted
  145. _CFDataGetTypeID
  146. _CFDataCreateWithBytesNoCopy
  147. _CFDataGetLength
  148. _CFDataGetMutableBytePtr
  149. _CFDataSetLength
  150. _CFDataAppendBytes
  151. _CFDataDeleteBytes
  152. _CFAbsoluteTimeGetCurrent
  153. _CFDateGetTypeID
  154. _CFDateCompare
  155. _CFGregorianDateIsValid
  156. _CFGregorianDateGetAbsoluteTime
  157. _CFAbsoluteTimeGetGregorianDate
  158. _CFAbsoluteTimeAddGregorianUnits
  159. _CFAbsoluteTimeGetDifferenceAsGregorianUnits
  160. _CFAbsoluteTimeGetDayOfWeek
  161. _CFAbsoluteTimeGetDayOfYear
  162. _CFAbsoluteTimeGetWeekOfYear
  163. _CFDictionaryGetTypeID
  164. _CFDictionaryCreateMutable
  165. __CFDictionaryCreate_ex
  166. __CFDictionarySetContext
  167. _CFDictionaryContainsKey
  168. _CFDictionaryContainsValue
  169. _CFDictionaryGetValue
  170. _CFDictionaryGetValueIfPresent
  171. _CFDictionaryApplyFunction
  172. __CFDictionarySetCapacity
  173. __CFDictionaryIsMutable
  174. _CFDictionaryAddValue
  175. _CFDictionaryRemoveValue
  176. _CFDictionaryRemoveAllValues
  177. __CFMachPortInstallNotifyPort
  178. _CFMachPortGetTypeID
  179. _CFMachPortGetPort
  180. _CFMachPortGetInvalidationCallBack
  181. _CFMachPortGetQueuedMessageCount
  182. _CFMachPortInvalidateAll
  183. _CFMachPortCreateRunLoopSource
  184. _CFMessagePortGetTypeID
  185. _CFMessagePortIsRemote
  186. _CFMessagePortGetName
  187. _CFMessagePortSetName
  188. _CFMessagePortGetInvalidationCallBack
  189. _CFMessagePortSetInvalidationCallBack
  190. _CFMessagePortCreateRunLoopSource
  191. _CFNotificationCenterGetTypeID
  192. _CFNotificationCenterGetDistributedCenter
  193. _CFNotificationCenterAddObserver
  194. _CFNotificationCenterRemoveObserver
  195. _CFNotificationCenterRemoveEveryObserver
  196. _CFNotificationCenterPostNotification
  197. _CFBooleanGetTypeID
  198. _CFBooleanGetValue
  199. _CFNumberGetTypeID
  200. _CFNumberGetType
  201. _CFNumberIsFloatType
  202. _CFNumberCompare
  203. __CFArgv
  204. __CFArgc
  205. __CFGetProgname
  206. __CFProcessPath
  207. __CFCreateHomeDirectoryURLForUser
  208. _CFGetUserName
  209. _CFCopyHomeDirectoryURLForUser
  210. _CFPlugInUnregisterFactory
  211. _CFPlugInUnregisterPlugInType
  212. _CFPlugInAddInstanceForFactory
  213. _CFPlugInInstanceGetTypeID
  214. _CFPlugInInstanceCreateWithInstanceDataSize
  215. _CFPlugInInstanceGetInterfaceFunctionTable
  216. _CFPlugInInstanceGetFactoryName
  217. _CFPlugInInstanceGetInstanceData
  218. _CFPlugInGetTypeID
  219. _CFPlugInCreate
  220. _CFPlugInGetBundle
  221. _CFPlugInIsLoadOnDemand
  222. _CFPreferencesSetAppValue
  223. _CFPreferencesAddSuitePreferencesToApp
  224. _CFPreferencesAppSynchronize
  225. _CFPreferencesCopyValue
  226. _CFPreferencesCopyMultiple
  227. _CFPreferencesSetValue
  228. _CFPreferencesCopyApplicationList
  229. _CFPreferencesCopyKeyList
  230. _CFPreferencesAppValueIsForced
  231. __CFDoOperation
  232. _CFPropertyListIsValid
  233. _CFPropertyListCreateXMLData
  234. __CFPropertyListCreateXMLDataWithExtras
  235. ___CFSetNastyFile
  236. _CFPropertyListCreateFromXMLData
  237. _CFRunLoopGetTypeID
  238. __CFRunLoopSetCurrent
  239. __CFRunLoopSetMain
  240. _CFRunLoopCopyCurrentMode
  241. _CFRunLoopCopyAllModes
  242. _CFRunLoopAddCommonMode
  243. __CFRunLoopFinished
  244. _CFRunLoopRun
  245. _CFRunLoopRunSpecific
  246. _CFRunLoopRunInMode
  247. _CFRunLoopWakeUp
  248. _CFRunLoopStop
  249. __CFRunLoopStopMode
  250. __CFRunLoopModeContainsMode
  251. __CFRunLoopAddModeToMode
  252. __CFRunLoopRemoveModeFromMode
  253. _CFRunLoopContainsSource
  254. _CFRunLoopAddSource
  255. _CFRunLoopRemoveSource
  256. _CFRunLoopContainsObserver
  257. _CFRunLoopAddObserver
  258. _CFRunLoopContainsTimer
  259. _CFRunLoopAddTimer
  260. _CFRunLoopSourceGetTypeID
  261. _CFRunLoopSourceGetContext
  262. _CFRunLoopObserverGetTypeID
  263. _CFRunLoopObserverCreate
  264. _CFRunLoopObserverGetActivities
  265. _CFRunLoopObserverGetOrder
  266. _CFRunLoopObserverDoesRepeat
  267. _CFRunLoopObserverInvalidate
  268. _CFRunLoopObserverIsValid
  269. _CFRunLoopObserverGetContext
  270. _CFRunLoopTimerGetTypeID
  271. _CFRunLoopTimerGetNextFireDate
  272. _CFRunLoopTimerSetNextFireDate
  273. _CFRunLoopTimerGetInterval
  274. _CFRunLoopTimerGetContext
  275. ___CFOAInitialize
  276. ___CFRecordAllocationEvent
  277. ___CFSetLastAllocationEventName
  278. __CFRuntimeRegisterClass
  279. __CFRuntimeGetClassWithTypeID
  280. __CFRuntimeUnregisterClassWithTypeID
  281. __CFRuntimeCreateInstance
  282. __CFRuntimeSetInstanceTypeID
  283. _CFTypeGetTypeID
  284. _CFGetTypeID
  285. _CFCopyTypeIDDescription
  286. _CFRetain
  287. _CFRelease
  288. _CFGetRetainCount
  289. _CFEqual
  290. _CFHash
  291. _CFCopyDescription
  292. _CFGetAllocator
  293. ___CFInitialize
  294. _CFSetGetTypeID
  295. _CFSetCreateMutable
  296. __CFSetSetContext
  297. _CFSetContainsValue
  298. _CFSetApplyFunction
  299. __CFSetSetCapacity
  300. __CFSetIsMutable
  301. _CFSetAddValue
  302. _CFSetRemoveValue
  303. _CFSetRemoveAllValues
  304. _CFSocketGetTypeID
  305. _CFSocketSetAddress
  306. _CFSocketCreateConnectedToSocketSignature
  307. _CFSocketInvalidate
  308. _CFSocketIsValid
  309. _CFSocketGetNative
  310. _CFSocketCopyAddress
  311. _CFSocketCopyPeerAddress
  312. _CFSocketGetContext
  313. _CFSocketGetSocketFlags
  314. _CFSocketSetSocketFlags
  315. _CFSocketCreateRunLoopSource
  316. _CFSocketSendData
  317. _CFSocketRegisterValue
  318. _CFSocketCopyRegisteredValue
  319. _CFSocketCopyRegisteredSocketSignature
  320. _CFSocketUnregister
  321. _CFSocketGetDefaultNameRegistryPortNumber
  322. _CFMergeSortArray
  323. _CFQSortArray
  324. ___CFStorageGetCapacity
  325. ___CFStorageGetValueSize
  326. _CFStorageGetTypeID
  327. _CFStorageInsertValues
  328. _CFStorageDeleteValues
  329. _CFStorageApplyFunction
  330. __CFStringSetCompatibility
  331. ___CFStringIsMutable
  332. ___CFStringIsEightBit
  333. _CFStringGetSystemEncoding
  334. _CFStringFileSystemEncoding
  335. _CFStringGetMaximumSizeForEncoding
  336. ___CFStringComputeEightBitStringEncoding
  337. ___CFStringHash
  338. _CFStringGetTypeID
  339. ___CFStringCreateImmutableFunnel2
  340. _CFStringCreateWithPascalString
  341. _CFStringCreateWithPascalStringNoCopy
  342. _CFStringCreateWithBytes
  343. __CFStringCreateWithBytesNoCopy
  344. _CFStringCreateWithFormatAndArguments
  345. __CFStringCreateWithFormatAndArgumentsAux
  346. _CFStringCreateCopy
  347. ___CFStringMakeConstantString
  348. _CFStringCreateMutableWithExternalCharactersNoCopy
  349. _CFStringCreateMutable
  350. _CFStringCreateMutableCopy
  351. _CFStringGetLength
  352. __CFStringGetLength2
  353. _CFStringGetCharacterAtIndex
  354. __CFStringCheckAndGetCharacterAtIndex
  355. _CFStringGetCharacters
  356. __CFStringCheckAndGetCharacters
  357. _CFStringGetPascalStringPtr
  358. _CFStringGetCString
  359. _CFStringCompareWithOptions
  360. _CFStringCompare
  361. _CFStringFindWithOptions
  362. _CFStringCreateArrayWithFindResults
  363. _CFStringFind
  364. _CFStringHasPrefix
  365. _CFStringHasSuffix
  366. _CFStringFindCharacterFromSet
  367. _CFStringGetLineBounds
  368. _CFStringCreateByCombiningStrings
  369. _CFStringCreateArrayBySeparatingStrings
  370. _CFStringCreateFromExternalRepresentation
  371. _CFStringCreateExternalRepresentation
  372. _CFStringGetFastestEncoding
  373. _CFStringGetIntValue
  374. _CFStringGetDoubleValue
  375. _CFStringSetExternalCharactersNoCopy
  376. _CFStringDelete
  377. _CFStringAppend
  378. _CFStringAppendCharacters
  379. _CFStringAppendPascalString
  380. _CFStringAppendCString
  381. _CFStringAppendFormat
  382. _CFStringFindAndReplace
  383. ___CFStringCheckAndReplace
  384. ___CFStringNoteErrors
  385. _CFStringPad
  386. _CFStringLowercase
  387. _CFStringCapitalize
  388. _CFStringNormalize
  389. _CFStringAppendFormatAndArguments
  390. __CFStringAppendFormatAndArgumentsAux
  391. _CFShowStr
  392. _CFStringEncodingUnicodeToBytes
  393. _CFStringEncodingBytesToUnicode
  394. __CFStringEncodingSetForceASCIICompatibility
  395. ___CFStringDecodeByteStream2
  396. ___CFStringDecodeByteStream3
  397. ___CFStringEncodeByteStream
  398. __CFStringGetFileSystemRepresentation
  399. _CFStringIsEncodingAvailable
  400. _CFStringGetListOfAvailableEncodings
  401. _CFStringGetNameOfEncoding
  402. _CFStringConvertIANACharSetNameToEncoding
  403. _CFStringConvertEncodingToIANACharSetName
  404. _CFStringConvertEncodingToNSStringEncoding
  405. _CFStringConvertNSStringEncodingToEncoding
  406. _CFStringConvertEncodingToWindowsCodepage
  407. _CFStringConvertWindowsCodepageToEncoding
  408. _CFStringGetMostCompatibleMacStringEncoding
  409. _CFTimeZoneGetTypeID
  410. _CFTimeZoneCopySystem
  411. _CFTimeZoneResetSystem
  412. _CFTimeZoneSetDefault
  413. _CFTimeZoneCopyAbbreviationDictionary
  414. _CFTimeZoneSetAbbreviationDictionary
  415. _CFTimeZoneCreateWithTimeIntervalFromGMT
  416. _CFTimeZoneGetName
  417. _CFTimeZoneCopyAbbreviation
  418. _CFTreeGetTypeID
  419. _CFTreeGetChildCount
  420. _CFTreeGetParent
  421. _CFTreeGetNextSibling
  422. _CFTreeGetFirstChild
  423. _CFTreeGetContext
  424. _CFTreeSetContext
  425. _CFTreeApplyFunctionToChildren
  426. _CFTreePrependChild
  427. _CFTreeAppendChild
  428. __CFURLCreateOnlyUTF8CompatibleURLs
  429. _CFURLCreateStringByReplacingPercentEscapes
  430. _CFURLCreateStringByAddingPercentEscapes
  431. _CFURLGetTypeID
  432. __CFURLAlloc
  433. __CFStringIsLegalURLString
  434. __CFURLInitWithString
  435. _CFURLCreateWithBytes
  436. _CFURLCreateData
  437. _CFURLCreateWithString
  438. _CFURLCopyAbsoluteURL
  439. _CFURLGetString
  440. _CFURLGetBaseURL
  441. _CFURLCopyScheme
  442. _CFURLCopyStrictPath
  443. _CFURLHasDirectoryPath
  444. _CFURLCopyHostName
  445. _CFURLGetPortNumber
  446. _CFURLCopyPassword
  447. _CFURLCopyParameterString
  448. _CFURLCopyQueryString
  449. _CFURLCopyFragment
  450. _CFURLCopyComponents
  451. _CFURLCreateFromComponents
  452. ___CFURLReservedPtr
  453. ___CFURLSetReservedPtr
  454. __CFURLCreateCurrentDirectoryURL
  455. _CFURLCreateWithFileSystemPath
  456. _CFURLCreateWithFileSystemPathRelativeToBase
  457. _CFURLCopyFileSystemPath
  458. _CFURLCreateStringWithFileSystemPath
  459. _CFURLGetFileSystemRepresentation
  460. _CFURLCreateFromFileSystemRepresentation
  461. _CFURLCreateFromFileSystemRepresentationRelativeToBase
  462. _CFURLCopyLastPathComponent
  463. _CFURLCopyPathExtension
  464. _CFURLCreateCopyDeletingLastPathComponent
  465. __CFGetFSSpecFromURL
  466. __CFCreateURLFromFSSpec
  467. _CFURLCreateFromFSRef
  468. _CFURLGetFSRef
  469. _CFURLWriteDataAndPropertiesToResource
  470. _CFUUIDGetTypeID
  471. _CFUUIDCreateWithBytes
  472. _CFUUIDCreateFromUUIDBytes
  473. _CFUniCharIsMemberOf
  474. _CFUniCharGetUnicodePropertyDataForPlane
  475. _CFUniCharDecomposeCharacter
  476. _CFUniCharDecompose
  477. _CFUniCharPrioritySort
  478. _CFUserNotificationGetTypeID
  479. _CFUserNotificationCreate
  480. _CFUserNotificationReceiveResponse
  481. _CFUserNotificationGetResponseValue
  482. _CFUserNotificationGetResponseDictionary
  483. _CFUserNotificationUpdate
  484. _CFUserNotificationDisplayNotice
  485. _CFLog2
  486. _CFHashBytes
  487. _CFCopySystemVersionString
  488. __CFCopySystemVersionDictionary
  489. __CFCopyServerVersionDictionary
  490. _CFGetExecutableLinkedLibraryVersion
  491. _CFGetExecutingLibraryVersion
  492. __CFExecutableLinkedOnOrAfter
  493. _CFShow
  494. _CFLog
  495. _CFXMLNodeGetTypeID
  496. _CFXMLNodeCreateCopy
  497. _CFXMLNodeGetTypeCode
  498. _CFXMLNodeGetString
  499. _CFXMLParserGetTypeID
  500. _CFXMLParserGetContext
  501. _CFXMLParserGetSourceURL
  502. _CFXMLParserGetLocation
  503. _CFXMLParserGetLineNumber
  504. _CFXMLParserCopyErrorDescription
  505. _CFXMLParserAbort
  506. _CFXMLParserCreate
  507. _CFXMLTreeGetNode
  508. _kCFCoreFoundationVersionString
  509. _kCFAllocatorDefault
  510. _kCFAllocatorUseContext
  511. ___CFBundleMagicNumbersArray
  512. _kCFAbsoluteTimeIntervalSince1970
  513. _kCFAbsoluteTimeIntervalSince1904
  514. _kCFCoreFoundationVersionNumber
  515. ___CFBundleExtensionsArray
  516. ___CFBundleLocaleAbbreviationsArray
  517. ___CFBundleLanguageAbbreviationsArray
  518. _CFNastyFile
  519. ___CFOASafe
  520. ___CFConstantStringClassReference
  521. ___CFDefaultEightBitStringEncoding
  522. _kCFTypeArrayCallBacks
  523. _kCFTypeBagCallBacks
  524. _kCFCopyStringBagCallBacks
  525. _kCFNull
  526. _kCFAllocatorSystemDefault
  527. _kCFAllocatorMalloc
  528. _kCFAllocatorNull
  529. _kCFStringBinaryHeapCallBacks
  530. _kCFBundleInfoDictionaryVersionKey
  531. _kCFBundleExecutableKey
  532. _kCFBundleIdentifierKey
  533. _kCFBundleVersionKey
  534. _kCFBundleDevelopmentRegionKey
  535. _kCFBundleLocalizationsKey
  536. __kCFBundlePackageTypeKey
  537. __kCFBundleSignatureKey
  538. __kCFBundleIconFileKey
  539. __kCFBundleDocumentTypesKey
  540. __kCFBundleURLTypesKey
  541. _kCFBundleNameKey
  542. __kCFBundleShortVersionStringKey
  543. __kCFBundleGetInfoStringKey
  544. __kCFBundleTypeNameKey
  545. __kCFBundleTypeRoleKey
  546. __kCFBundleTypeIconFileKey
  547. __kCFBundleTypeOSTypesKey
  548. __kCFBundleTypeExtensionsKey
  549. __kCFBundleTypeMIMETypesKey
  550. __kCFBundleURLNameKey
  551. __kCFBundleURLIconFileKey
  552. __kCFBundleURLSchemesKey
  553. __kCFBundleOldIconFileKey
  554. __kCFBundleOldDocumentTypesKey
  555. __kCFBundleOldTypeNameKey
  556. __kCFBundleOldTypeRoleKey
  557. __kCFBundleOldTypeIconFileKey
  558. __kCFBundleInfoPlistURLKey
  559. __kCFBundleNumericVersionKey
  560. __kCFBundleExecutablePathKey
  561. __kCFBundleCFMLoadAsBundleKey
  562. __kCFBundleAllowMixedLocalizationsKey
  563. ___kCFCSetNameControl
  564. ___kCFCSetNameWhitespace
  565. ___kCFCSetNameWhitespaceAndNewline
  566. ___kCFCSetNameDecimalDigit
  567. ___kCFCSetNameLetter
  568. ___kCFCSetNameLowercaseLetter
  569. ___kCFCSetNameUppercaseLetter
  570. ___kCFCSetNameNonBase
  571. ___kCFCSetNameDecomposable
  572. ___kCFCSetNameAlphaNumeric
  573. ___kCFCSetNamePunctuation
  574. ___kCFCSetNameIllegal
  575. ___kCFCSetNameCapitalizedLetter
  576. ___kCFCSetNameStringTypeFormat
  577. _kCFTypeDictionaryKeyCallBacks
  578. _kCFCopyStringDictionaryKeyCallBacks
  579. _kCFTypeDictionaryValueCallBacks
  580. _kCFBooleanTrue
  581. _kCFPlugInDynamicRegistrationKey
  582. _kCFPlugInUnloadFunctionKey
  583. _kCFPreferencesCurrentApplication
  584. _kCFPreferencesCurrentHost
  585. _kCFRunLoopDefaultMode
  586. _kCFTypeSetCallBacks
  587. _kCFCopyStringSetCallBacks
  588. _kCFSocketNameKey
  589. _kCFSocketValueKey
  590. _kCFSocketResultKey
  591. ___kCFSocketRegistryRequestRunLoopMode
  592. _kCFEmptyString
  593. _kCFNSDecimalSeparatorKey
  594. _kCFURLFileScheme
  595. _kCFURLLocalhost
  596. _kCFURLFileExists
  597. _kCFURLFilePOSIXMode
  598. _kCFURLFileLength
  599. _kCFFileURLExists
  600. _kCFFileURLPOSIXMode
  601. _kCFFileURLDirectoryContents
  602. _kCFFileURLSize
  603. _kCFFileURLLastModificationTime
  604. _kCFHTTPURLStatusCode
  605. _kCFHTTPURLStatusLine
  606. _kCFUserNotificationTokenKey
  607. _kCFUserNotificationTimeoutKey
  608. _kCFUserNotificationFlagsKey
  609. _kCFUserNotificationIconPathKey
  610. _kCFUserNotificationSoundPathKey
  611. _kCFUserNotificationLocalizationPathKey
  612. _kCFUserNotificationTextFieldLabelsKey
  613. _kCFUserNotificationSoundURLKey
  614. _kCFUserNotificationAlertHeaderKey
  615. _kCFUserNotificationAlertMessageKey
  616. _kCFUserNotificationDefaultButtonTitleKey
  617. _kCFUserNotificationAlternateButtonTitleKey
  618. _kCFUserNotificationProgressIndicatorValueKey
  619. _kCFUserNotificationCheckBoxTitlesKey
  620. __kCFSystemVersionProductNameKey
  621. __kCFSystemVersionProductCopyrightKey
  622. __kCFSystemVersionProductVersionKey
  623. __kCFSystemVersionProductVersionExtraKey
  624. __kCFSystemVersionBuildVersionKey
  625. __kCFSystemVersionProductVersionStringKey
  626. __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

darwin-dev

darwinbuild-dev

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:

  1. Open two terminals
  2. In the first terminal, run: opensnoop -ex
  3. 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)

  1. D programs are compiled in user-land
  2. And sent to the DTrace virtual machine in the kernel-land
  3. 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/14176https://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)   

  1. 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 -initialize pdisk $RDEVICE -createPartition "$VOLNAME" Apple_HFS $sectors $(expr $blocks - $sectors) > /dev/null

  2. 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

  3. The HFS partition image comes also originally from /dev/zero via dd'. dd if=/dev/zero of="$T_TARGET_P3" bs=1024k count=600 vndevice’ 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

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:

  1. 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”.
  2. 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.
  3. 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

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

  1. Find out the version of a (installed/uninstalled) binary root (“package”)
  2. Install a binary root, including its run-time dependencies
  3. Uninstall a binary root
  4. Check whether a given binary root is needed by any other binary roots that are currently installed
  5. Find out which files belong to a given binary root
  6. Find out which binary root a given file belongs to
  7. Upgrade a binary root (taking into consideration its dependencies)
  8. Prevent different binary roots from overwriting each other’s files
  9. Repair permissions
  10. Download binary roots from repositories (like apt-get or yum)
  11. 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
  • 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/ puredarwin

    See “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.

  1. ./pd_fetch
  2. ./pd_thin
  3. ./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" or DARWIN_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="" or PUREDARWIN_RELEASE="bootstrap" or PUREDARWIN_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" or BINARYROOTS_LIST_FILE="pd_roots.bootstrap" or BINARYROOTS_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

Mercurial

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

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 

http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Intro/IntroFoundation.html 

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

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

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:

  1. Download the dmg from http://rpm5.org/files/rpm/rpm-5.1/BINARY/
  2. Mount the dmg on the Mac, copy RPM5.pkg to the root of the PureDarwin system
  3. 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.

(Source: PureDarwin)

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-&gt;next ) 
    { 
        if ( bvr-&gt;flags & kBVFlagNativeBoot ) bvr1 = bvr; 
        // if ( bvr-&gt;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.mkext from 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 create with a simple dd if=/dev/zero and hdid -nomount with losetup … 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:

  1. Client network card firmware asks DHCP server
  2. DHCP server asks dnsmasq on the server
  3. dnsmasq sends TFTP information
  4. Client network card firmware downloads boot1pxe.0 file specified by dnsmasq from dnsmasq
  5. boot1pxe.0 loads boot (boot-132) (known to work up to this point)
  6. boot-132 loads mach_kernel and Extensions.mkext from the server (still to be implemented)
  7. mach_kernel loads network kext and uses it to load the root volume from the network (still to be implemented)
  8. 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:
  9. Run Ubuntu 9.10 Live CD (we are using this as the server for now; later we could use PureDarwin as the server)
  10. 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:

  1. Client network card firmware asks DHCP server
  2. DHCP server asks dnsmasq on the server
  3. dnsmasq sends TFTP information
  4. Client network card firmware downloads pxelinux.0 file specified by dnsmasq from dnsmasq
  5. pxelinux downloads its configuration
  6. pxelinux loads mboot.c32 which is a multiboot loader
  7. mboot.c32 loads boot which is a multiboot-compliant version of boot-132 such as Chameleon (known to work up to this point)
  8. boot-132 loads mach_kernel and Extensions.mkext from a supplied ramdisk (still to be implemented)
  9. mach_kernel loads network kext and uses it to load the root volume from the network (still to be implemented)
  10. 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:
  11. Run Ubuntu 9.10 Live CD (we are using this as the server; later we could use PureDarwin as the server)
  12. 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 &lt; 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

`` theme_folder_name

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

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/sbin According 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 determinedPermissions 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/sh or 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:

  1. Install the CPAN package (Perl modules, needed for database access).
  2. Install curl (if you want to try installing packages).
  3. Install darwinup (from darwinbuild) into /usr/sbin/ (we can argue about where it should go later).
  4. Copy dtbi and 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] /tmp
  • cp /usr/standalone/i386/boot /tmp/ (for MBR)
  • tar xfz /usr/standalone/PureDarwinCore.root.tar.gz -C /tmp/
  • umount /tmp
  • echo 'Remove CD-ROM...'
  • shutdown -r now And 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://developer.apple.com/documentation/DeveloperTools/Conceptual/DynamicLibraries/Introduction.html 

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

Troubles with CF building

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 MySQLgcc_42gccBerkeleyDBbind9 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:
![](/archive/img/developers/darwinbuild/troubleshooting/9J61pd1-n.png)


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)
****

![](/archive/img/developers/darwinbuild/troubleshooting/CF.png)

**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 &lt;- 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 &gt; 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"' &gt; 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)
![](/archive/img/developers/darwinbuild/troubleshooting/IOKitUser.png)







<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).



![](/archive/img/developers/darwinbuild/troubleshooting/Security.png)

------------------------------------------------------------------------



### 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&lt;(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>
![](/archive/img/developers/darwinbuild/troubleshooting/bootstrap_cmds.png)
------------------------------------------------------------------------
### 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)`

![](/archive/img/developers/darwinbuild/troubleshooting/dtrace%20patched.png)


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)`


![](/archive/img/developers/darwinbuild/troubleshooting/dtrace.png)

------------------------------------------------------------------------


### 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 &lt;CarbonCore/MacTypes.h&gt;


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` &lt;- 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.

![](/archive/img/developers/darwinbuild/troubleshooting/launchd_9F33pd1.png)
__
__

**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'
&gt;&gt; int  daemon(int, int) __DARWIN_1050(daemon) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5,__IPHONE_2_0,__IPHONE_2_0);
&gt;&gt;&gt;
//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&lt;(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&lt;(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!**

![](/archive/img/developers/darwinbuild/troubleshooting/ruby.png)

------------------------------------------------------------------------

### 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:


![](/archive/img/developers/darwinbuild/troubleshooting/system_cmds_9F33pd1.png)


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.gz Example: ACPIPS2Nub-1.tar.gz
  • If you have a patch, it should be named with the name, a dash, version, followed by .p0.patch Example: 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.gz Otherwise 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

MacPorts.org man port

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://www.macports.org/ 

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

MacPorts Guide

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

http://www.graphviz.org 

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&parameters/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
  • 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
    • add PureDarwin Nano as CDrom + select after F8 the Xmas HD and start with Graphics mode = 1024x768x16

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

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> 0x10008086&0xFF00FFFF

Class code for ethernet controller (0x0200 (in fact 4bytes, last byte ignored)) <key>IOPCIClassMatch</key> 0x02000000&0xffff0000

Which is confirmed on

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  &lt;class IOPCIDevice, registered, matched, active, busy 0, retain 9&gt;
| |   |   | | {
| |   |   | |   "IOPCIResourced" = Yes
| |   |   | |   "IOInterruptControllers" = ("io-apic-0")
| |   |   | |   "IOName" = "ethernet"
| |   |   | |   "subsystem-id" = &lt;50070000&gt;
| |   |   | |   "IODeviceMemory" = (({"address"=18446744073048031232,"length"=131072}),({"address"=18446744073047900160,"le$
| |   |   | |   "IOPMPCIConfigSpaceVolatile" = No
| |   |   | |   "class-code" = &lt;00000200&gt;
| |   |   | |   "EEPROM Version" = "0.0"
| |   |   | |   "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2}
| |   |   | |   "revision-id" = &lt;01000000&gt;
| |   |   | |   "IOInterruptSpecifiers" = (&lt;1300000007000000&gt;)
| |   |   | |   "assigned-addresses" = &lt;1008028200000000000092d800000000000002001808028200000000000090d80000000000000100200$
| |   |   | |   "IOChildIndex" = 2
| |   |   | |   "built-in" = &lt;00&gt;
| |   |   | |   "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" = &lt;ad150000&gt;
| |   |   | |   "name" = "ethernet"
| |   |   | |   "EEPROM Checksum Valid" = Yes
| |   |   | |   "reg" = &lt;00080200000000000000000000000000000000001008020200000000000000000000000000000200180802020000000000$
| |   |   | |   "compatible" = &lt;"pci15ad,750","pci8086,100f","pciclass,020000"&gt;
| |   |   | | }
| |   |   | |
| |   |   | +-o AppleIntel8254XEthernet  &lt;class AppleIntel8254XEthernet, !registered, !matched, active, busy 0, retain 6&gt;
| |   |   |   | {
| |   |   |   |   "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" = &lt;000c29691726&gt;
| |   |   |   |   "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  &lt;class IOEthernetInterface, registered, matched, active, busy 0, retain 10&gt;
| |   |   |     | {
| |   |   |     |   "IOMediaAddressLength" = 6
| |   |   |     |   "IOPrimaryInterface" = Yes
| |   |   |     |   "IOInterfaceType" = 6
| |   |   |     |   "IORequiredPacketFilters" = {"IONetworkFilterGroup"=19,"IOEthernetWakeOnLANFilterGroup"=0}
| |   |   |     |   "IOInterfaceFlags" = 34915
| |   |   |     |   "IOInterfaceExtraFlags" = 1073744192
| |   |   |     |   "IOInterfaceUnit" = 0
| |   |   |     |   "IONetworkData" = {"IOEthernetStatsKey"={"Size"=216,"Data"=&lt;0000000000000000000000000000000000000000000$
| |   |   |     |   "BSD Name" = "en0"
| |   |   |     |   "IOLocation" = ""
| |   |   |     |   "IOMaxTransferUnit" = 1500
| |   |   |     |   "IOInterfaceNamePrefix" = "en"
| |   |   |     |   "IOBuiltin" = Yes
| |   |   |     |   "IOActivePacketFilters" = {"IONetworkFilterGroup"=19,"IOEthernetWakeOnLANFilterGroup"=0}
| |   |   |     |   "IOMulticastAddressList" = &lt;01005e0000fb01005e0000013333000000fb33333e2cf1a83333000000013333ff691726&gt;
| |   |   |     |   "IOInterfaceState" = 3
| |   |   |     |   "IOMediaHeaderLength" = 14
| |   |   |     |   "IOControllerEnabled" = Yes
| |   |   |     | }
| |   |   |     |
| |   |   |     +-o IONetworkStack  &lt;class IONetworkStack, registered, matched, active, busy 0, retain 7&gt;
| |   |   |       | {
| |   |   |       |   "IOProviderClass" = "IOResources"
| |   |   |       |   "IOMatchCategory" = "IONetworkStack"
| |   |   |       |   "IOProbeScore" = 0
| |   |   |       |   "IOClass" = "IONetworkStack"
| |   |   |       |   "CFBundleIdentifier" = "com.apple.iokit.IONetworkingFamily"
| |   |   |       |   "IOResourceMatch" = "IOBSD"
| |   |   |       | }
| |   |   |       |
| |   |   |       +-o IONetworkStackUserClient  &lt;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

  1. driver examines the values in the PCI configuration space registers (e.g., revision ID register)
  2. driver sets some value of them (e.g., enable memory write)
  3. 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:

  1. verify that it is of the appropriate class
  2. retain a reference to it
  3. 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:

  1. Package should be extremely useful to PureDarwin
  2. Package’s potential release as open-source should not be unreasonable (eg, Foundation-667.22)
  3. 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

http://www.x.org/wiki/ 

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

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:

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.

**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

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, 

  1. zpool (configures ZFS storage pools)
  2. zfs (configures ZFS file systems)
  3. zoink (misc)
  4. 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 Apple Darwin ISOs

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

  1. make an hfs partition and mount it

    • FOR LINUX: using mkfs.hfs
    • FOR OSX: using the Disk Utils.app
  2. loop mount the puredarwin image (iso or vmdk)

    • loop mount a vmdk might be tricky under linux.
  3. 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

So far, the hfs partition is ready, now going to install the boot loader

  1. Download an extract the Chameleon Boot Loader to any folder. Copy the boot file (often called boot2) to the root of your hfs partition.

  2. Unmount your HFS partition (VERY IMPORTANT)    dd the boot1h file (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)

  1. 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/

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_hfs and mount.

Then, assuming that you’re working with the first disk (0),

  1. Create a partition and install the primary bootloader: fdisk -i -a hfs /dev/rdisk0
  2. Create an HFS+ file system on the disk: newfs_hfs -s -J -v /dev/rdisk0
  3. Install the secondary bootloader: dd if=/usr/standalone/i386/boot1h of=/dev/rdisk0s1
  4. Mount the partition: mount -t hfs /dev/rdisk0s1 /tmp
  5. Install the tertiary bootloader: cp /usr/standalone/i386/boot /tmp/
  6. 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

harden |ˈ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:

  1. Single pass randomly erase the disk
  2. US DoD 7 pass secure erase
  3. 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 efibootboot 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 {} ;

fixme

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:

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

  1. make an hfs partition and mount it    * FOR LINUX: using mkfs.hfs    * FOR OSX: using the Disk Utils.app

  2. loop mount the puredarwin image (iso or vmdk)    * loop mount a vmdk might be tricky under linux.

  3. 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

  1. Download an extract the Chameleon Boot Loader to any folder. Copy the “boot” file (often called boot2) to the root of your hfs partition.

  2. 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)

  1. 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_hfs and mount Then, assuming that you’re working with the first disk (0):
  1. Create a partition and install the primary bootloader: fdisk -i -a hfs /dev/rdisk0
  2. Create an HFS+ file system on the disk: newfs_hfs -s -J -v /dev/rdisk0
  3. Install the secondary bootloader: dd if=/usr/standalone/i386/boot1h of=/dev/rdisk0s1
  4. Mount the partition: mount -t hfs /dev/rdisk0s1 /tmp
  5. Install the tertiary bootloader: cp /usr/standalone/i386/boot /tmp/
  6. 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

Community projects

Documentation

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…

Disabled EnableTransactions GroupName wheel Label com.apple.AppleFileServer MachServices com.apple.AppleFileServer HideUntilCheckIn ProgramArguments /usr/sbin/AppleFileServer **** **Sockets** **** **** **** **Listener** **** **** **** **Bonjour** **** **** **** **SockServiceName** **** **afpovertcp** **** **** **** **** WaitForDebugger

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).  |
| [![](../_/rsrc/1212143168141/users/p |      Note that the PureDarwin       |
| rerequisites/darwin8.gif)](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   |
| [![](../_/rsrc/1212143186078/users/p | PureDarwin Xmas: VMware Fusion 2     |
| rerequisites/darwin9.gif)](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 |
| [![](../_/rsrc/1212143130425/users/p | an>                                  |
| rerequisites/xicon.jpg)](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.
  • bless does 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://www.zsh.org/

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 -p

SHA_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

Smart homepage

Versions

VersionOS X VersionNameBuildXNU
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+171228.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

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

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.

Noch mehr Stoff für Terminalisten

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.