<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >

<chapter id='dev-manual-start'>

<title>Setting Up to Use the Yocto Project</title>

<para>
    This chapter provides procedures related to getting set up to use the
    Yocto Project.
    You can learn about creating a team environment that develops using the
    Yocto Project, how to set up a
    <ulink url='&YOCTO_DOCS_REF_URL;#hardware-build-system-term'>build host</ulink>,
    how to locate Yocto Project source repositories, and how to create local
    Git repositories.
</para>

<section id="usingpoky-changes-collaborate">
    <title>Creating a Team Development Environment</title>

    <para>
        It might not be immediately clear how you can use the Yocto
        Project in a team development environment, or how to scale it for a
        large team of developers.
        You can adapt the Yocto Project to many different use cases and
        scenarios.
        However, this flexibility could cause difficulties if you are trying
        to create a working setup that scales across a large team.
    </para>

    <para>
        To help you understand how to set up this type of environment,
        this section presents a procedure that gives you information
        that can help you get the results you want.
        The procedure is high-level and presents some of the project's most
        successful experiences, practices, solutions, and available
        technologies that have proved to work well in the past.
        Keep in mind, the procedure here is a starting point.
        You can build off these steps and customize the procedure to fit any
        particular working environment and set of practices.
        <orderedlist>
            <listitem><para>
                <emphasis>Determine Who is Going to be Developing:</emphasis>
                You need to understand who is going to be doing anything
                related to the Yocto Project and determine their roles.
                Making this determination is essential to completing
                steps two and three, which are to get your equipment together
                and set up your development environment's hardware topology.
                </para>

                <para>The following roles exist:
                    <itemizedlist>
                        <listitem><para>
                            <emphasis>Application Developer:</emphasis>
                            This type of developer does application level work
                            on top of an existing software stack.
                            </para></listitem>
                        <listitem><para>
                            <emphasis>Core System Developer:</emphasis>
                            This type of developer works on the contents of the
                            operating system image itself.
                            </para></listitem>
                        <listitem><para>
                            <emphasis>Build Engineer:</emphasis>
                            This type of developer manages Autobuilders and
                            releases.
                            Not all environments need a Build Engineer.
                            </para></listitem>
                        <listitem><para>
                            <emphasis>Test Engineer:</emphasis>
                            This type of developer creates and manages automated
                            tests that are used to ensure all application and
                            core system development meets desired quality
                            standards.
                            </para></listitem>
                    </itemizedlist>
                </para></listitem>
            <listitem><para>
                <emphasis>Gather the Hardware:</emphasis>
                Based on the size and make-up of the team, get the hardware
                together.
                Ideally, any development, build, or test engineer uses
                a system that runs a supported Linux distribution.
                These systems, in general, should be high performance
                (e.g. dual, six-core Xeons with 24 Gbytes of RAM and plenty
                of disk space).
                You can help ensure efficiency by having any machines used
                for testing or that run Autobuilders be as high performance
                as possible.
                </para></listitem>
            <listitem><para>
                <emphasis>Understand the Hardware Topology of the Environment:</emphasis>
                Once you understand the hardware involved and the make-up
                of the team, you can understand the hardware topology of the
                development environment.
                You can get a visual idea of the machines and their roles
                across the development environment.

<!--
                The following figure shows a moderately sized Yocto Project
                development environment.

                <para role="writernotes">
                Need figure.</para>
-->

                </para></listitem>
            <listitem><para>
                <emphasis>Use Git as Your Source Control Manager (SCM):</emphasis>
                Keeping your
                <ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink>
                (i.e. recipes, configuration files, classes, and so forth)
                and any software you are developing under the control of an SCM
                system that is compatible   with the OpenEmbedded build system
                is advisable.
                Of the SCMs BitBake supports, the Yocto Project team strongly
                recommends using
                <ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>.
                Git is a distributed system that is easy to backup,
                allows you to work remotely, and then connects back to the
                infrastructure.
                <note>
                    For information about BitBake, see the
                    <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
                </note></para>

                <para>It is relatively easy to set up Git services and create
                infrastructure like
                <ulink url='&YOCTO_GIT_URL;'>http://git.yoctoproject.org</ulink>,
                which is based on server software called
                <filename>gitolite</filename> with <filename>cgit</filename>
                being used to generate the web interface that lets you view the
                repositories.
                The <filename>gitolite</filename> software identifies users
                using SSH keys and allows branch-based access controls to
                repositories that you can control as little or as much as
                necessary.
                <note>
                   The setup of these services is beyond the scope of this
                   manual.
                   However, sites such as the following exist that describe
                   how to perform setup:
                   <itemizedlist>
                       <listitem><para>
                           <ulink url='http://git-scm.com/book/ch4-8.html'>Git documentation</ulink>:
                           Describes how to install
                           <filename>gitolite</filename> on the server.
                           </para></listitem>
                       <listitem><para>
                           <ulink url='http://gitolite.com'>Gitolite</ulink>:
                            Information for <filename>gitolite</filename>.
                            </para></listitem>
                        <listitem><para>
                            <ulink url='https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools'>Interfaces, frontends, and tools</ulink>:
                            Documentation on how to create interfaces and
                            frontends for Git.
                            </para></listitem>
                    </itemizedlist>
                </note>
                </para></listitem>
            <listitem><para>
                <emphasis>Set up the Application Development Machines:</emphasis>
                As mentioned earlier, application developers are creating
                applications on top of existing software stacks.
                Following are some best practices for setting up machines
                used for application development:
                <itemizedlist>
                    <listitem><para>
                        Use a pre-built toolchain that contains the software
                        stack itself.
                        Then, develop the application code on top of the
                        stack.
                        This method works well for small numbers of relatively
                        isolated applications.
                        </para></listitem>
                    <listitem><para>
                        Keep your cross-development toolchains updated.
                        You can do this through provisioning either as new
                        toolchain downloads or as updates through a package
                        update mechanism using <filename>opkg</filename>
                        to provide updates to an existing toolchain.
                        The exact mechanics of how and when to do this depend
                        on local policy.
                        </para></listitem>
                    <listitem><para>
                        Use multiple toolchains installed locally into
                        different locations to allow development across
                        versions.
                        </para></listitem>
                </itemizedlist>
                </para></listitem>
            <listitem><para>
                <emphasis>Set up the Core Development Machines:</emphasis>
                As mentioned earlier, core developers work on the contents of
                the operating system itself.
                Following are some best practices for setting up machines
                used for developing images:
                <itemizedlist>
                    <listitem><para>
                        Have the
                        <ulink url='&YOCTO_DOCS_REF_URL;#build-system-term'>OpenEmbedded build system</ulink>
                        available on the developer workstations so developers
                        can run their own builds and directly rebuild the
                        software stack.
                        </para></listitem>
                    <listitem><para>
                        Keep the core system unchanged as much as
                        possible and do your work in layers on top of the
                        core system.
                        Doing so gives you a greater level of portability when
                        upgrading to new versions of the core system or Board
                        Support Packages (BSPs).
                        </para></listitem>
                    <listitem><para>
                        Share layers amongst the developers of a
                        particular project and contain the policy configuration
                        that defines the project.
                        </para></listitem>
                </itemizedlist>
                </para></listitem>
            <listitem><para>
                <emphasis>Set up an Autobuilder:</emphasis>
                Autobuilders are often the core of the development
                environment.
                It is here that changes from individual developers are brought
                together and centrally tested.
                Based on this automated build and test environment, subsequent
                decisions about releases can be made.
                Autobuilders also allow for "continuous integration" style
                testing of software components and regression identification
                and tracking.</para>

                <para>See "<ulink url='http://autobuilder.yoctoproject.org'>Yocto Project Autobuilder</ulink>"
                for more information and links to buildbot.
                The Yocto Project team has found this implementation
                works well in this role.
                A public example of this is the Yocto Project
                Autobuilders, which the Yocto Project team uses to test the
                overall health of the project.</para>

                <para>The features of this system are:
                <itemizedlist>
                    <listitem><para>
                        Highlights when commits break the build.
                        </para></listitem>
                    <listitem><para>
                        Populates an
                        <ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>sstate cache</ulink>
                        from which developers can pull rather than requiring
                        local builds.
                        </para></listitem>
                    <listitem><para>
                        Allows commit hook triggers, which trigger builds when
                        commits are made.
                        </para></listitem>
                    <listitem><para>
                        Allows triggering of automated image booting
                        and testing under the QuickEMUlator (QEMU).
                        </para></listitem>
                    <listitem><para>
                        Supports incremental build testing and
                        from-scratch builds.
                        </para></listitem>
                    <listitem><para>
                        Shares output that allows developer
                        testing and historical regression investigation.
                        </para></listitem>
                    <listitem><para>
                        Creates output that can be used for releases.
                        </para></listitem>
                    <listitem><para>
                        Allows scheduling of builds so that resources
                        can be used efficiently.
                        </para></listitem>
                </itemizedlist>
                </para></listitem>
            <listitem><para>
                <emphasis>Set up Test Machines:</emphasis>
                Use a small number of shared, high performance systems
                for testing purposes.
                Developers can use these systems for wider, more
                extensive testing while they continue to develop
                locally using their primary development system.
                </para></listitem>
            <listitem><para>
                <emphasis>Document Policies and Change Flow:</emphasis>
                The Yocto Project uses a hierarchical structure and a
                pull model.
                Scripts exist to create and send pull requests
                (i.e. <filename>create-pull-request</filename> and
                <filename>send-pull-request</filename>).
                This model is in line with other open source projects where
                maintainers are responsible for specific areas of the project
                and a single maintainer handles the final "top-of-tree" merges.
                <note>
                    You can also use a more collective push model.
                    The <filename>gitolite</filename> software supports both the
                    push and pull models quite easily.
                </note></para>

                <para>As with any development environment, it is important
                to document the policy used as well as any main project
                guidelines so they are understood by everyone.
                It is also a good idea to have well structured
                commit messages, which are usually a part of a project's
                guidelines.
                Good commit messages are essential when looking back in time and
                trying to understand why changes were made.</para>

                <para>If you discover that changes are needed to the core
                layer of the project, it is worth sharing those with the
                community as soon as possible.
                Chances are if you have discovered the need for changes,
                someone else in the community needs them also.
                </para></listitem>
            <listitem><para>
                <emphasis>Development Environment Summary:</emphasis>
                Aside from the previous steps, some best practices exist
                within the Yocto Project development environment.
                Consider the following:
                <itemizedlist>
                    <listitem><para>
                        Use
                        <ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>
                        as the source control system.
                        </para></listitem>
                    <listitem><para>
                        Maintain your Metadata in layers that make sense
                        for your situation.
                        See the
                        "<ulink url='&YOCTO_DOCS_OM_URL;#the-yocto-project-layer-model'>The Yocto Project Layer Model</ulink>"
                        section in the Yocto Project Overview and Concepts
                        Manual and the
                        "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>"
                        section for more information on layers.
                        </para></listitem>
                    <listitem><para>
                        Separate the project's Metadata and code by using
                        separate Git repositories.
                        See the
                        "<ulink url='&YOCTO_DOCS_OM_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>"
                        section in the Yocto Project Overview and Concepts
                        Manual for information on these repositories.
                        See the
                        "<link linkend='locating-yocto-project-source-files'>Locating Yocto Project Source Files</link>"
                        section for information on how to set up local Git
                        repositories for related upstream Yocto Project
                        Git repositories.
                        </para></listitem>
                    <listitem><para>
                        Set up the directory for the shared state cache
                        (<ulink url='&YOCTO_DOCS_REF_URL;#var-SSTATE_DIR'><filename>SSTATE_DIR</filename></ulink>)
                        where it makes sense.
                        For example, set up the sstate cache on a system used
                        by developers in the same organization and share the
                        same source directories on their machines.
                        </para></listitem>
                    <listitem><para>
                        Set up an Autobuilder and have it populate the
                        sstate cache and source directories.
                        </para></listitem>
                    <listitem><para>
                        The Yocto Project community encourages you
                        to send patches to the project to fix bugs or add
                        features.
                        If you do submit patches, follow the project commit
                        guidelines for writing good commit messages.
                        See the "<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>"
                        section.
                        </para></listitem>
                    <listitem><para>
                        Send changes to the core sooner than later
                        as others are likely to run into the same issues.
                        For some guidance on mailing lists to use, see the list
                        in the
                        "<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>"
                        section.
                        For a description of the available mailing lists, see
                        the
                        "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>"
                        section in the Yocto Project Reference Manual.
                        </para></listitem>
                </itemizedlist>
                </para></listitem>
        </orderedlist>
    </para>
</section>

<section id='dev-preparing-the-build-host'>
    <title>Preparing the Build Host</title>

    <para>
        This section provides procedures to set up a system to be used as your
        <ulink url='&YOCTO_DOCS_REF_URL;#hardware-build-system-term'>build host</ulink>
        for development using the Yocto Project.
        Your build host can be a native Linux machine (recommended) or it can
        be a machine (Linux, Mac, or Windows) that uses
        <ulink url='https://git.yoctoproject.org/cgit/cgit.cgi/crops/about/'>CROPS</ulink>,
        which leverages
        <ulink url='https://www.docker.com/'>Docker Containers</ulink>.
        <note>
            You cannot use a build host that is using the
            <ulink url='https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux'>Windows Subsystem for Linux</ulink>
            (WSL).
            The Yocto Project is not compatible with WSL.
        </note>
    </para>

    <para>
        Once your build host is set up to use the Yocto Project,
        further steps are necessary depending on what you want to
        accomplish.
        See the following references for information on how to prepare for
        Board Support Package (BSP) development and kernel development:
        <itemizedlist>
            <listitem><para>
                <emphasis>BSP Development:</emphasis>
                See the
                "<ulink url='&YOCTO_DOCS_BSP_URL;#preparing-your-build-host-to-work-with-bsp-layers'>Preparing Your Build Host to Work With BSP Layers</ulink>"
                section in the Yocto Project Board Support Package (BSP)
                Developer's Guide.
                </para></listitem>
            <listitem><para>
                <emphasis>Kernel Development:</emphasis>
                See the
                "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#preparing-the-build-host-to-work-on-the-kernel'>Preparing the Build Host to Work on the Kernel</ulink>"
                section in the Yocto Project Linux Kernel Development Manual.
                </para></listitem>
        </itemizedlist>
    </para>

    <section id='setting-up-a-native-linux-host'>
        <title>Setting Up a Native Linux Host</title>

        <para>
            Follow these steps to prepare a native Linux machine as your
            Yocto Project Build Host:
            <orderedlist>
                <listitem><para>
                    <emphasis>Use a Supported Linux Distribution:</emphasis>
                    You should have a reasonably current Linux-based host
                    system.
                    You will have the best results with a recent release of
                    Fedora, openSUSE, Debian, Ubuntu, or CentOS as these
                    releases are frequently tested against the Yocto Project
                    and officially supported.
                    For a list of the distributions under validation and their
                    status, see the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>" section
                    in the Yocto Project Reference Manual and the wiki page at
                    <ulink url='&YOCTO_WIKI_URL;/wiki/Distribution_Support'>Distribution Support</ulink>.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Have Enough Free Memory:</emphasis>
                    Your system should have at least 50 Gbytes of free disk
                    space for building images.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Meet Minimal Version Requirements:</emphasis>
                    The OpenEmbedded build system should be able to run on any
                    modern distribution that has the following versions for
                    Git, tar, and Python.
                    <itemizedlist>
                        <listitem><para>
                            Git 1.8.3.1 or greater
                            </para></listitem>
                        <listitem><para>
                            tar 1.27 or greater
                            </para></listitem>
                        <listitem><para>
                            Python 3.4.0 or greater.
                            </para></listitem>
                    </itemizedlist>
                    If your build host does not meet any of these three listed
                    version requirements, you can take steps to prepare the
                    system so that you can still use the Yocto Project.
                    See the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</ulink>"
                    section in the Yocto Project Reference Manual for
                    information.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Install Development Host Packages:</emphasis>
                    Required development host packages vary depending on your
                    build host and what you want to do with the Yocto
                    Project.
                    Collectively, the number of required packages is large
                    if you want to be able to cover all cases.</para>

                    <para>For lists of required packages for all scenarios,
                    see the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-build-host'>Required Packages for the Build Host</ulink>"
                    section in the Yocto Project Reference Manual.
                    </para></listitem>
            </orderedlist>
            Once you have completed the previous steps, you are ready to
            continue using a given development path on your native Linux
            machine.
            If you are going to use BitBake, see the
            "<link linkend='cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</link>"
            section.
            If you are going to use the Extensible SDK, see the
            "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-extensible'>Using the Extensible SDK</ulink>"
            Chapter in the Yocto Project Application Development and the
            Extensible Software Development Kit (eSDK) manual.
            If you want to work on the kernel, see the
            <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>.
            If you are going to use Toaster, see the
            "<ulink url='&YOCTO_DOCS_TOAST_URL;#toaster-manual-setup-and-use'>Setting Up and Using Toaster</ulink>"
            section in the Toaster User Manual.
        </para>
    </section>

    <section id='setting-up-to-use-crops'>
        <title>Setting Up to Use CROss PlatformS (CROPS)</title>

        <para>
            With
            <ulink url='https://github.com/crops/crops/blob/master/README.md'>CROPS</ulink>,
            which leverages
            <ulink url='https://www.docker.com/'>Docker Containers</ulink>,
            you can create a Yocto Project development environment that
            is operating system agnostic.
            You can set up a container in which you can develop using the
            Yocto Project on a Windows, Mac, or Linux  machine.
        </para>

        <para>
            Follow these general steps to prepare a Windows, Mac, or Linux
            machine as your Yocto Project build host:
            <orderedlist>
                <listitem><para>
                    <emphasis>Determine What Your Build Host Needs:</emphasis>
                    <ulink url='https://www.docker.com/what-docker'>Docker</ulink>
                    is a software container platform that you need to install
                    on the build host.
                    Depending on your build host, you might have to install
                    different software to support Docker containers.
                    Go to the Docker installation page and read about the
                    platform requirements in
                    "<ulink url='https://docs.docker.com/install/#supported-platforms'>Supported Platforms</ulink>"
                    your build host needs to run containers.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Choose What To Install:</emphasis>
                    Depending on whether or not your build host meets system
                    requirements, you need to install "Docker CE Stable" or
                    the "Docker Toolbox".
                    Most situations call for Docker CE.
                    However, if you have a build host that does not meet
                    requirements (e.g. Pre-Windows 10 or Windows 10 "Home"
                    version), you must install Docker Toolbox instead.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Go to the Install Site for Your Platform:</emphasis>
                    Click the link for the Docker edition associated with
                    your build host's native software.
                    For example, if your build host is running Microsoft
                    Windows Version 10 and you want the Docker CE Stable
                    edition, click that link under "Supported Platforms".
                    </para></listitem>
                <listitem><para>
                    <emphasis>Install the Software:</emphasis>
                    Once you have understood all the pre-requisites, you can
                    download and install the appropriate software.
                    Follow the instructions for your specific machine and
                    the type of the software you need to install:
                    <itemizedlist>
                        <listitem><para>
                            Install
                            <ulink url='https://docs.docker.com/docker-for-windows/install/#install-docker-for-windows-desktop-app'>Docker CE for Windows</ulink>
                            for Windows build hosts that meet requirements.
                            </para></listitem>
                        <listitem><para>
                            Install
                            <ulink url='https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac'>Docker CE for Macs</ulink>
                            for Mac build hosts that meet requirements.
                            </para></listitem>
                        <listitem><para>
                            Install
                            <ulink url='https://docs.docker.com/toolbox/toolbox_install_windows/'>Docker Toolbox for Windows</ulink>
                            for Windows build hosts that do not meet Docker
                            requirements.
                            </para></listitem>
                        <listitem><para>
                            Install
                            <ulink url='https://docs.docker.com/toolbox/toolbox_install_mac/'>Docker Toolbox for MacOS</ulink>
                            for Mac build hosts that do not meet Docker
                            requirements.
                            </para></listitem>
                        <listitem><para>
                            Install
                            <ulink url='https://docs.docker.com/install/linux/docker-ce/centos/'>Docker CE for CentOS</ulink>
                            for Linux build hosts running the CentOS
                            distribution.
                            </para></listitem>
                        <listitem><para>
                            Install
                            <ulink url='https://docs.docker.com/install/linux/docker-ce/debian/'>Docker CE for Debian</ulink>
                            for Linux build hosts running the Debian
                            distribution.
                            </para></listitem>
                        <listitem><para>
                            Install
                            <ulink url='https://docs.docker.com/install/linux/docker-ce/fedora/'>Docker CE for Fedora</ulink>
                            for Linux build hosts running the Fedora
                            distribution.
                            </para></listitem>
                        <listitem><para>
                            Install
                            <ulink url='https://docs.docker.com/install/linux/docker-ce/ubuntu/'>Docker CE for Ubuntu</ulink>
                            for Linux build hosts running the Ubuntu
                            distribution.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Optionally Orient Yourself With Docker:</emphasis>
                    If you are unfamiliar with Docker and the container
                    concept, you can learn more here -
                    <ulink url='https://docs.docker.com/get-started/'></ulink>.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Launch Docker or Docker Toolbox:</emphasis>
                    You should be able to launch Docker or the Docker Toolbox
                    and have a terminal shell on your development host.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Set Up the Containers to Use the Yocto Project:</emphasis>
                    Go to
                    <ulink url='https://github.com/crops/docker-win-mac-docs/wiki'></ulink>
                    and follow the directions for your particular
                    build host (i.e. Linux, Mac, or Windows).</para>

                    <para>Once you complete the setup instructions for your
                    machine, you have the Poky, Extensible SDK, and Toaster
                    containers available.
                    You can click those links from the page and learn more
                    about using each of those containers.
                    </para></listitem>
            </orderedlist>
            Once you have a container set up, everything is in place to
            develop just as if you were running on a native Linux machine.
            If you are going to use the Poky container, see the
            "<link linkend='cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</link>"
            section.
            If you are going to use the Extensible SDK container, see the
            "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-extensible'>Using the Extensible SDK</ulink>"
            Chapter in the Yocto Project Application Development and the
            Extensible Software Development Kit (eSDK) manual.
            If you are going to use the Toaster container, see the
            "<ulink url='&YOCTO_DOCS_TOAST_URL;#toaster-manual-setup-and-use'>Setting Up and Using Toaster</ulink>"
            section in the Toaster User Manual.
        </para>
    </section>
</section>

<section id='locating-yocto-project-source-files'>
    <title>Locating Yocto Project Source Files</title>

    <para>
        This section shows you how to locate and access the
        source files that ship with the Yocto Project.
        You establish and use these local files to work on projects.
        <note><title>Notes</title>
            <itemizedlist>
                <listitem><para>
                    For concepts and introductory information about Git as it
                    is used in the Yocto Project, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                    </para></listitem>
                <listitem><para>
                    For concepts on Yocto Project source repositories, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>"
                    section in the Yocto Project Overview and Concepts Manual."
                    </para></listitem>
            </itemizedlist>
        </note>
    </para>

    <section id='accessing-source-repositories'>
        <title>Accessing Source Repositories</title>

        <para>
            Working from a copy of the upstream Yocto Project
            <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
            is the preferred method for obtaining and using a Yocto Project
            release.
            You can view the Yocto Project Source Repositories at
            <ulink url='&YOCTO_GIT_URL;'></ulink>.
            In particular, you can find the
            <filename>poky</filename> repository at
            <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/'></ulink>.
        </para>

        <para>
            Use the following procedure to locate the latest upstream copy of
            the <filename>poky</filename> Git repository:
            <orderedlist>
                <listitem><para>
                    <emphasis>Access Repositories:</emphasis>
                    Open a browser and go to
                    <ulink url='&YOCTO_GIT_URL;'></ulink> to access the
                    GUI-based interface into the Yocto Project source
                    repositories.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Select the Repository:</emphasis>
                    Click on the repository in which you are interested (e.g.
                    <filename>poky</filename>).
                    </para></listitem>
                <listitem><para>
                    <emphasis>Find the URL Used to Clone the Repository:</emphasis>
                    At the bottom of the page, note the URL used to
                    <ulink url='&YOCTO_DOCS_OM_URL;#git-commands-clone'>clone</ulink>
                    that repository (e.g.
                    <filename>&YOCTO_GIT_URL;/poky</filename>).
                    <note>
                        For information on cloning a repository, see the
                        "<link linkend='cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</link>"
                        section.
                    </note>
                    </para></listitem>
            </orderedlist>
        </para>
    </section>

    <section id='accessing-index-of-releases'>
        <title>Accessing Index of Releases</title>

        <para>
            Yocto Project maintains an Index of Releases area that contains
            related files that contribute to the Yocto Project.
            Rather than Git repositories, these files are tarballs that
            represent snapshots in time of a given component.
            <note><title>Tip</title>
                The recommended method for accessing Yocto Project
                components is to use Git to clone the upstream repository and
                work from within that locally cloned repository.
                The procedure in this section exists should you desire a
                tarball snapshot of any given component.
            </note>
            Follow these steps to locate and download a particular tarball:
            <orderedlist>
                <listitem><para>
                    <emphasis>Access the Index of Releases:</emphasis>
                    Open a browser and go to
                    <ulink url='&YOCTO_DL_URL;/releases'></ulink> to access the
                    Index of Releases.
                    The list represents released components (e.g.
                    <filename>bitbake</filename>,
                    <filename>sato</filename>, and so on).
                    <note>
                        The <filename>yocto</filename> directory contains the
                        full array of released Poky tarballs.
                        The <filename>poky</filename> directory in the
                        Index of Releases was historically used for very
                        early releases and exists now only for retroactive
                        completeness.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Select a Component:</emphasis>
                    Click on any released component in which you are interested
                    (e.g. <filename>yocto</filename>).
                    </para></listitem>
                <listitem><para>
                    <emphasis>Find the Tarball:</emphasis>
                    Drill down to find the associated tarball.
                    For example, click on <filename>yocto-&DISTRO;</filename> to
                    view files associated with the Yocto Project &DISTRO;
                    release (e.g. <filename>poky-&DISTRO_NAME_NO_CAP;-&POKYVERSION;.tar.bz2</filename>,
                    which is the released Poky tarball).
                    </para></listitem>
                <listitem><para>
                    <emphasis>Download the Tarball:</emphasis>
                    Click the tarball to download and save a snapshot of the
                    given component.
                    </para></listitem>
            </orderedlist>
        </para>
    </section>

    <section id='using-the-downloads-page'>
        <title>Using the Downloads Page</title>

        <para>
            The
            <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>
            uses a "DOWNLOADS" page from which you can locate and download
            tarballs of any Yocto Project release.
            Rather than Git repositories, these files represent snapshot
            tarballs similar to the tarballs located in the Index of Releases
            described in the
            "<link linkend='accessing-index-of-releases'>Accessing Index of Releases</link>"
            section.
            <note><title>Tip</title>
                The recommended method for accessing Yocto Project
                components is to use Git to clone a repository and work from
                within that local repository.
                The procedure in this section exists should you desire a
                tarball snapshot of any given component.
            </note>
            <orderedlist>
                <listitem><para>
                    <emphasis>Go to the Yocto Project Website:</emphasis>
                    Open The
                    <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>
                    in your browser.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Get to the Downloads Area:</emphasis>
                    Select the "DOWNLOADS" item from the pull-down
                    "SOFTWARE" tab menu near the top of the page.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Select a Yocto Project Release:</emphasis>
                    Use the menu next to "RELEASE" to display and choose
                    a recent or past supported Yocto Project release
                    (e.g. &DISTRO_NAME_NO_CAP;,
                    &DISTRO_NAME_NO_CAP_MINUS_ONE;, and so forth).
                    <note><title>Tip</title>
                        For a "map" of Yocto Project releases to version
                        numbers, see the
                        <ulink url='https://wiki.yoctoproject.org/wiki/Releases'>Releases</ulink>
                        wiki page.
                    </note>
                    You can use the "RELEASE ARCHIVE" link to reveal a menu of
                    all Yocto Project releases.
                </para></listitem>
                <listitem><para>
                    <emphasis>Download Tools or Board Support Packages (BSPs):</emphasis>
                    From the "DOWNLOADS" page, you can download tools or
                    BSPs as well.
                    Just scroll down the page and look for what you need.
                    </para></listitem>
            </orderedlist>
        </para>
    </section>

    <section id='accessing-nightly-builds'>
        <title>Accessing Nightly Builds</title>

        <para>
            Yocto Project maintains an area for nightly builds that contains
            tarball releases at <ulink url='&YOCTO_AB_NIGHTLY_URL;'/>.
            These builds include Yocto Project releases ("poky"),
            toolchains, and builds for supported machines.
        </para>

        <para>
            Should you ever want to access a nightly build of a particular
            Yocto Project component, use the following procedure:
            <orderedlist>
                <listitem><para>
                    <emphasis>Locate the Index of Nightly Builds:</emphasis>
                    Open a browser and go to
                    <ulink url='&YOCTO_AB_NIGHTLY_URL;'/> to access the
                    Nightly Builds.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Select a Date:</emphasis>
                    Click on the date in which you are interested.
                    If you want the latest builds, use "CURRENT".
                    </para></listitem>
                <listitem><para>
                    <emphasis>Select a Build:</emphasis>
                    Choose the area in which you are interested.
                    For example, if you are looking for the most recent
                    toolchains, select the "toolchain" link.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Find the Tarball:</emphasis>
                    Drill down to find the associated tarball.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Download the Tarball:</emphasis>
                    Click the tarball to download and save a snapshot of the
                    given component.
                    </para></listitem>
            </orderedlist>
        </para>
    </section>
</section>

<section id='cloning-and-checking-out-branches'>
    <title>Cloning and Checking Out Branches</title>

    <para>
        To use the Yocto Project for development, you need a release locally
        installed on your development system.
        This locally installed set of files is referred to as the
        <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
        in the Yocto Project documentation.
    </para>

    <para>
        The preferred method of creating your Source Directory is by using
        <ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink> to clone a local
        copy of the upstream <filename>poky</filename> repository.
        Working from a cloned copy of the upstream repository allows you
        to contribute back into the Yocto Project or to simply work with
        the latest software on a development branch.
        Because Git maintains and creates an upstream repository with
        a complete history of changes and you are working with a local
        clone of that repository, you have access to all the Yocto
        Project development branches and tag names used in the upstream
        repository.
    </para>

    <section id='cloning-the-poky-repository'>
        <title>Cloning the <filename>poky</filename> Repository</title>

        <para>
            Follow these steps to create a local version of the
            upstream
            <ulink url='&YOCTO_DOCS_REF_URL;#poky'><filename>poky</filename></ulink>
            Git repository.
            <orderedlist>
                <listitem><para>
                    <emphasis>Set Your Directory:</emphasis>
                    Change your working directory to where you want to
                    create your local copy of
                    <filename>poky</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Clone the Repository:</emphasis>
                    The following example command clones the
                    <filename>poky</filename> repository and uses
                    the default name "poky" for your local repository:
                    <literallayout class='monospaced'>
     $ git clone git://git.yoctoproject.org/poky
     Cloning into 'poky'...
     remote: Counting objects: 432160, done.
     remote: Compressing objects: 100% (102056/102056), done.
     remote: Total 432160 (delta 323116), reused 432037 (delta 323000)
     Receiving objects: 100% (432160/432160), 153.81 MiB | 8.54 MiB/s, done.
     Resolving deltas: 100% (323116/323116), done.
     Checking connectivity... done.
                    </literallayout>
                    Unless you specify a specific development branch or
                    tag name, Git clones the "master" branch, which results
                    in a snapshot of the latest development changes for
                    "master".
                    For information on how to check out a specific
                    development branch or on how to check out a local
                    branch based on a tag name, see the
                    "<link linkend='checking-out-by-branch-in-poky'>Checking Out By Branch in Poky</link>"
                    and
                    <link linkend='checkout-out-by-tag-in-poky'>Checking Out By Tag in Poky</link>"
                    sections, respectively.</para>

                    <para>Once the local repository is created, you can
                    change to that directory and check its status.
                    Here, the single "master" branch exists on your system
                    and by default, it is checked out:
                    <literallayout class='monospaced'>
     $ cd ~/poky
     $ git status
     On branch master
     Your branch is up-to-date with 'origin/master'.
     nothing to commit, working directory clean
     $ git branch
     * master
                    </literallayout>
                    Your local repository of poky is identical to the
                    upstream poky repository at the time from which it was
                    cloned.
                    As you work with the local branch, you can periodically
                    use the <filename>git pull &dash;&dash;rebase</filename>
                    command to be sure you are up-to-date with the upstream
                    branch.
                    </para></listitem>
            </orderedlist>
        </para>
    </section>

    <section id='checking-out-by-branch-in-poky'>
        <title>Checking Out by Branch in Poky</title>

        <para>
            When you clone the upstream poky repository, you have access to
            all its development branches.
            Each development branch in a repository is unique as it forks
            off the "master" branch.
            To see and use the files of a particular development branch
            locally, you need to know the branch name and then specifically
            check out that development branch.
            <note>
                Checking out an active development branch by branch name
                gives you a snapshot of that particular branch at the time
                you check it out.
                Further development on top of the branch that occurs after
                check it out can occur.
            </note>
            <orderedlist>
                <listitem><para>
                    <emphasis>Switch to the Poky Directory:</emphasis>
                    If you have a local poky Git repository, switch to that
                    directory.
                    If you do not have the local copy of poky, see the
                    "<link linkend='cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</link>"
                    section.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Determine Existing Branch Names:</emphasis>
                    <literallayout class='monospaced'>
     $ git branch -a
     * master
       remotes/origin/1.1_M1
       remotes/origin/1.1_M2
       remotes/origin/1.1_M3
       remotes/origin/1.1_M4
       remotes/origin/1.2_M1
       remotes/origin/1.2_M2
       remotes/origin/1.2_M3
           .
           .
           .
       remotes/origin/pyro
       remotes/origin/pyro-next
       remotes/origin/rocko
       remotes/origin/rocko-next
       remotes/origin/sumo
       remotes/origin/sumo-next
       remotes/origin/thud
       remotes/origin/thud-next
       remotes/origin/warrior
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Checkout the Branch:</emphasis>
                    Checkout the development branch in which you want to work.
                    For example, to access the files for the Yocto Project
                    &DISTRO; Release (&DISTRO_NAME;), use the following command:
                    <literallayout class='monospaced'>
     $ git checkout -b &DISTRO_NAME_NO_CAP; origin/&DISTRO_NAME_NO_CAP;
     Branch &DISTRO_NAME_NO_CAP; set up to track remote branch &DISTRO_NAME_NO_CAP; from origin.
     Switched to a new branch '&DISTRO_NAME_NO_CAP;'
                    </literallayout>
                    The previous command checks out the "&DISTRO_NAME_NO_CAP;"
                    development branch and reports that the branch is tracking
                    the upstream "origin/&DISTRO_NAME_NO_CAP;" branch.</para>

                    <para>The following command displays the branches
                    that are now part of your local poky repository.
                    The asterisk character indicates the branch that is
                    currently checked out for work:
                    <literallayout class='monospaced'>
     $ git branch
       master
     * &DISTRO_NAME_NO_CAP;
                    </literallayout>
                    </para></listitem>
            </orderedlist>
        </para>
    </section>

    <section id='checkout-out-by-tag-in-poky'>
        <title>Checking Out by Tag in Poky</title>

        <para>
            Similar to branches, the upstream repository uses tags
            to mark specific commits associated with significant points in
            a development branch (i.e. a release point or stage of a
            release).
            You might want to set up a local branch based on one of those
            points in the repository.
            The process is similar to checking out by branch name except you
            use tag names.
            <note>
                Checking out a branch based on a tag gives you a
                stable set of files not affected by development on the
                branch above the tag.
            </note>
            <orderedlist>
                <listitem><para>
                    <emphasis>Switch to the Poky Directory:</emphasis>
                    If you have a local poky Git repository, switch to that
                    directory.
                    If you do not have the local copy of poky, see the
                    "<link linkend='cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</link>"
                    section.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Fetch the Tag Names:</emphasis>
                    To checkout the branch based on a tag name, you need to
                    fetch the upstream tags into your local repository:
                    <literallayout class='monospaced'>
     $ git fetch --tags
     $
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    <emphasis>List the Tag Names:</emphasis>
                    You can list the tag names now:
                    <literallayout class='monospaced'>
     $ git tag
     1.1_M1.final
     1.1_M1.rc1
     1.1_M1.rc2
     1.1_M2.final
     1.1_M2.rc1
        .
        .
        .
     yocto-2.5
     yocto-2.5.1
     yocto-2.5.2
     yocto-2.5.3
     yocto-2.6
     yocto-2.6.1
     yocto-2.6.2
     yocto-2.7
     yocto_1.5_M5.rc8
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Checkout the Branch:</emphasis>
                    <literallayout class='monospaced'>
     $ git checkout tags/&DISTRO_REL_TAG; -b my_yocto_&DISTRO;
     Switched to a new branch 'my_yocto_&DISTRO;'
     $ git branch
       master
     * my_yocto_&DISTRO;
                    </literallayout>
                    The previous command creates and checks out a local
                    branch named "my_yocto_&DISTRO;", which is based on
                    the commit in the upstream poky repository that has
                    the same tag.
                    In this example, the files you have available locally
                    as a result of the <filename>checkout</filename>
                    command are a snapshot of the
                    "&DISTRO_NAME_NO_CAP;" development branch at the point
                    where Yocto Project &DISTRO; was released.
                    </para></listitem>
            </orderedlist>
        </para>
    </section>
</section>

</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
