<!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='toaster-manual-reference'>

<title>Concepts and Reference</title>

    <para>
        In order to configure and use Toaster, you should understand some
        concepts and have some basic command reference material available.
        This final chapter provides conceptual information on layer sources,
        releases, and JSON configuration files.
        Also provided is a quick look at some useful
        <filename>manage.py</filename> commands that are Toaster-specific.
        Information on <filename>manage.py</filename> commands does exist
        across the Web and the information in this manual by no means
        attempts to provide a command comprehensive reference.
    </para>

    <section id='layer-source'>
        <title>Layer Source</title>

        <para>
            In general, a "layer source" is a source of information about
            existing layers.
            In particular, we are concerned with layers that you can use
            with the Yocto Project and Toaster.
            This chapter describes a particular type of layer source called
            a "layer index."
        </para>

        <para>
            A layer index is a web application that contains information
            about a set of custom layers.
            A good example of an existing layer index is the
            OpenEmbedded Metadata Index.
            A public instance of this layer index exists at
            <ulink url='http://layers.openembedded.org'></ulink>.
            You can find the code for this layer index's web application at
            <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/layerindex-web/'></ulink>.
        </para>

        <para>
            When you tie a layer source into Toaster, it can query the layer
            source through a
            <ulink url='http://en.wikipedia.org/wiki/Representational_state_transfer'>REST</ulink>
            API, store the information about the layers in the Toaster
            database, and then show the information to users.
            Users are then able to view that information and build layers
            from Toaster itself without worrying about cloning or editing
            the BitBake layers configuration file
            <filename>bblayers.conf</filename>.
        </para>

        <para>
            Tying a layer source into Toaster is convenient when you have
            many custom layers that need to be built on a regular basis by
            a community of developers.
            In fact, Toaster comes pre-configured with the OpenEmbedded
            Metadata Index.
            <note>
                You do not have to use a layer source to use Toaster.
                Tying into a layer source is optional.
            </note>
        </para>

        <section id='layer-source-using-with-toaster'>
            <title>Setting Up and Using a Layer Source</title>

            <para>
                To use your own layer source, you need to set up the layer
                source and then tie it into Toaster.
                This section describes how to tie into a layer index in a manner
                similar to the way Toaster ties into the OpenEmbedded Metadata
                Index.
           </para>

            <section id='understanding-your-layers'>
                <title>Understanding Your Layers</title>

                <para>
                    The obvious first step for using a layer index is to have
                    several custom layers that developers build and access using
                    the Yocto Project on a regular basis.
                    This set of layers needs to exist and you need to be
                    familiar with where they reside.
                    You will need that information when you set up the
                    code for the web application that "hooks" into your set of
                    layers.
                </para>

                <para>
                    For general information on layers, see the
                    "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
                    and
                    "<ulink url='&YOCTO_DOCS_BSP_URL;#using-the-yocto-projects-bsp-tools'>Using the Yocto Project's BSP Tools</ulink>"
                    sections in the Yocto Project Board Support Package (BSP)
                    Developer's Guide.
                </para>
            </section>

            <section id='configuring-toaster-to-hook-into-your-layer-source'>
                <title>Configuring Toaster to Hook Into Your Layer Index</title>

                <para>
                    If you want Toaster to use your layer index, you must host
                    the web application in a server to which Toaster can
                    connect.
                    You also need to give Toaster the information about your
                    layer index.
                    In other words, you have to configure Toaster to use your
                    layer index.
                    This section describes two methods by which you can
                    configure and use your layer index.
                </para>

                <para>
                    In the previous section, the code for the OpenEmbedded
                    Metadata Index (i.e.
                    <ulink url='http://layers.openembedded.org'></ulink>) was
                    referenced.
                    You can use this code, which is at
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/layerindex-web/'></ulink>,
                    as a base to create your own layer index.
                </para>

                <section id='use-the-administration-interface'>
                    <title>Use the Administration Interface</title>

                    <para>
                        Access the administration interface through a
                        browser by entering the URL of your Toaster instance and
                        adding "<filename>/admin</filename>" to the end of the
                        URL.
                        As an example, if you are running Toaster locally, use
                        the following URL:
                        <literallayout class='monospaced'>
     http://127.0.0.1:8000/admin
                        </literallayout>
                    </para>

                    <para>
                        The administration interface has a "Layer sources"
                        section that includes an "Add layer source" button.
                        Click that button and provide the required information.
                        Make sure you select "layerindex" as the layer source type.
                    </para>
                </section>

                <section id='select-the-toasterconf-json-file'>
                    <title>Use the <filename>toasterconf.json</filename> File</title>

                    <para>
                        If you do not want to use the Administration
                        Interface, you can edit the
                        <link linkend='toaster-json-files'><filename>toasterconf.json</filename></link>
                        file and reload it to Toaster.
                    </para>

                    <para>
                        When you set up Toaster in Build Mode, you are prompted
                        to select a Toaster configuration file.
                        This configuration file is used to set up the initial
                        configuration values within the Toaster database
                        including the layer sources.
                        Three versions of the configuration file exist:
                        <itemizedlist>
                            <listitem><para>
                                The first version of the file is found in the
                                <filename>conf</filename> directory of the
                                <filename>meta-yocto</filename> layer
                                (i.e.
                                <filename>meta-yocto/conf/toasterconf.json</filename>).
                                This version contains the default Yocto Project
                                configuration for Toaster.
                                You are prompted to select this file during the
                                Toaster set up process if you had cloned the
                                <filename>poky</filename> repository (i.e.
                                <filename>git://git.yoctoproject.org/poky</filename>).
                                </para></listitem>
                            <listitem><para>
                                The second version of the file is in the
                                <filename>conf</filename> directory of the
                                <filename>openembedded-core</filename> layer
                                (i.e. <filename>meta/conf/toasterconf.json</filename>).
                                This version contains the default OpenEmbedded
                                configuration for Toaster.
                                You are prompted to select this file during the
                                Toaster set up process if you had cloned the
                                <filename>openembedded-core</filename> repository
                                (i.e.
                                <filename>git://git.openembedded.org/openembedded-core</filename>).
                                </para></listitem>
                            <listitem><para>
                                The third version is a sample configuration
                                useful for when you want to set up a hosted
                                service in Build Mode.
                                You can find this version on the
                                <ulink url='https://wiki.yoctoproject.org/wiki/File:Toasterconf.json.txt.patch'>File:Toasterconf.json.txt.patch</ulink>
                                wiki page.
                                </para></listitem>
                        </itemizedlist>
                    </para>
                </section>

                <section id='edit-the-configuration-file'>
                    <title>Edit the Configuration File</title>

                    <para>
                        Edit the version of the
                        <filename>toasterconf.json</filename> file you
                        used to set up your Toaster instance.
                        In the file, you will find a section for layer sources
                        such as the following:
                        <literallayout class='monospaced'>
     "layersources": [
         {
             "name": "Local Yocto Project",
             "sourcetype": "local",
             "apiurl": "../../",
             "branches": ["HEAD", "master", "fido", "dizzy"],
             "layers": [
                 {
                     "name": "openembedded-core",
                     "local_path": "meta",
                     "vcs_url": "remote:origin",
                     "dirpath": "meta"
                 },
                 {
                     "name": "meta-yocto",
                     "local_path": "meta-yocto",
                     "vcs_url": "remote:origin",
                     "dirpath": "meta-yocto"
                 },
                 {
                     "name": "meta-yocto-bsp",
                     "local_path": "meta-yocto-bsp",
                     "vcs_url": "remote:origin",
                     "dirpath": "meta-yocto-bsp"
                 }

             ]
         },
         {
             "name": "OpenEmbedded",
             "sourcetype": "layerindex",
             "apiurl": "http://layers.openembedded.org/layerindex/api/",
             "branches": ["master", "fido", "dizzy"]
         },
         {
             "name": "Imported layers",
             "sourcetype": "imported",
             "apiurl": "",
             "branches": ["master", "fido", "dizzy", "HEAD"]

         }
     ],
                        </literallayout>
                        You should add your own layer source to this section by
                        following the same format used for the "OpenEmbedded"
                        layer source shown above.
                    </para>

                    <para>
                        Give your layer source a name, provide the URL of your
                        layer source API, use the source type "layerindex", and
                        indicate which branches from your layer source you want
                        to make available through Toaster.
                        For example, the OpenEmbedded layer source makes
                        available only its "master", "fido", and "dizzy"
                        branches.
                    </para>

                    <para>
                        The branches must match the branch you
                        set when configuring your releases.
                        For example, if you configure one release in Toaster
                        by setting its branch to "branch-one" and you configure
                        another release in Toaster by setting its branch to
                        "branch-two", the branches in your layer source should
                        be "branch-one" and "branch-two" as well.
                        Doing so creates a connection between the releases
                        and the layer information from your layer source.
                        Thus, when users create a project with a given
                        release, they will see the appropriate layers from
                        your layer source.
                        This connection ensures that only layers that are
                        compatible with the selected project release can be
                        selected for building.
                    </para>

                    <para>
                        Once you have added this information to the
                        <filename>toasterconf.json</filename> file, save your
                        changes.
                    </para>

                    <para>
                        In a terminal window, navigate to the directory that
                        contains the Toaster database, which by default is the
                        root of the Yocto Project
                        <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
                        Once you are located in that directory, run the
                        "<filename>loadconf</filename>" command, which takes as
                        an argument the full path to the
                        <filename>toasterconf.json</filename> file you just edited.
                        For example, if you cloned the
                        <filename>poky</filename> repository and you edited the
                        <filename>meta-yocto/conf/toasterconf.json</filename> file,
                        you would type something like the following:
                        <literallayout class='monospaced'>
     $ bitbake/lib/toaster/manage.py loadconf /home/scottrif/poky/meta-yocto/conf/toasterconf.json
                        </literallayout>
                        After entering this command, you need to update the
                        Toaster database with the information coming from your
                        new layer source.
                        To do that, you should run the
                        "<filename>lsupdates</filename>" command from the directory
                        that contains the Toaster database.
                        Here is an example:
                        <literallayout class='monospaced'>
     $ bitbake/lib/toaster/manage.py lsupdates
                        </literallayout>
                        If Toaster can reach the API URL, you should see a message
                        telling you that Toaster is updating the layer source
                        information.
                    </para>

                    <para>
                        Once the information has been updated, verify the new layer
                        information is available by using the Toaster web interface.
                        To do that, visit the "All compatible layers" page inside a
                        Toaster project.
                        The layers from your layer source should be listed there.
                    </para>
                </section>
            </section>
        </section>
    </section>

    <section id='toaster-releases'>
        <title>Releases</title>

        <para>
            When you create a Toaster project using the web interface,
            you are asked to choose a "Release."
            In the context of Toaster, the term "Release" refers to a set of
            layers and a BitBake version the OpenEmbedded build system uses
            to build something.
            As shipped, Toaster is pre-configured with releases that
            correspond to Yocto Project release branches.
            However, you can modify, delete, and create new releases
            according to your needs.
            This section provides some background information on releases.
        </para>

        <section id='toaster-releases-supported'>
            <title>Pre-Configured Releases</title>

            <para>
                As shipped, Toaster is configured to use a specific set of
                releases.
                Of course, you can always configure Toaster to use any
                release.
                For example, you might want your project to build against a
                specific commit of any of the "out-of-the-box" releases.
                Or, you might want your project to build against different
                revisions of OpenEmbedded and BitBake.
            </para>

            <para>
                As shipped, Toaster is configured to work with the following
                releases:
                <itemizedlist>
                    <listitem><para><emphasis>Yocto Project 1.7 "Dizzy" or OpenEmbedded "Dizzy":</emphasis>
                        This release causes your Toaster projects to
                        build against the head of the dizzy branch at
                        <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/log/?h=dizzy'></ulink>
                        or
                        <ulink url='http://git.openembedded.org/openembedded-core/commit/?h=dizzy'></ulink>.
                        </para></listitem>
                    <listitem><para><emphasis>Yocto Project 1.8 "Fido" or OpenEmbedded "Fido":</emphasis>
                        This release causes your Toaster projects to
                        build against the head of the fido branch at
                        <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/log/?h=fido'></ulink>
                        or
                        <ulink url='http://git.openembedded.org/openembedded-core/commit/?h=fido'></ulink>.
                        </para></listitem>
                    <listitem><para><emphasis>Yocto Project "Master" or OpenEmbedded "Master":</emphasis>
                        This release causes your Toaster Projects to
                        build against the head of the master branch, which is
                        where active development takes place, at
                        <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/log/'></ulink>
                        or
                        <ulink url='http://git.openembedded.org/openembedded-core/log/'></ulink>.
                        </para></listitem>
                    <listitem><para><emphasis>Local Yocto Project or Local OpenEmbedded:</emphasis>
                        This release causes your Toaster Projects to
                        build against the head of the <filename>poky</filename>
                        or <filename>openembedded-core</filename> clone you
                        have local to the machine running Toaster.
                        </para></listitem>
                </itemizedlist>
            </para>
        </section>

        <section id='toaster-releases-comprised-of'>
            <title>What Makes Up a Release?</title>

            <para>
                A release consists of the following:
                <itemizedlist>
                    <listitem><para><emphasis>Name:</emphasis>
                        The name of the release (<filename>name</filename>).
                        This release name never appears in the the Toaster
                        web interface.
                        Consequently, a user never sees the release name.
                        </para></listitem>
                    <listitem><para><emphasis>Description:</emphasis>
                        The textual description of the release
                        (<filename>description</filename>).
                        This description is what users encounter when creating
                        projects with the Toaster web interface.
                        When you configure your release, be sure to use
                        a description that sufficiently describes and is
                        understandable.
                        If Toaster has more than one release configured, the
                        release descriptions appear listed in a drop down menu
                        when a user creates a new project.
                        If Toaster has only one release configured, all
                        projects created using the web interface take that
                        release and the drop down menu does not display in the
                        Toaster web interface.
                        </para></listitem>
                    <listitem><para><emphasis>BitBake:</emphasis>
                        The Bitbake version (<filename>bitbake</filename>)
                        used to build layers set in the current release.
                        This version is described by a name, a Git URL, a
                        branch in the Git URL, and a directory path in the
                        Git repository.
                        As an example, consider the following snippet from
                        a Toaster JSON configuration file.
                        This BitBake version uses the master branch from the
                        OpenEmbedded repository:
                        <literallayout class='monospaced'>
     "bitbake" : [
         {
             "name": "master",
             "giturl": "git://git.openembedded.org/bitbake",
             "branch": "master",
             "dirpath": ""
         }
     ]
                        </literallayout>
                        Here is more detail on each of the items that comprise
                        the BitBake version:
                        <itemizedlist>
                            <listitem><para><emphasis>Name:</emphasis>
                                A string
                                (<filename>name</filename>) used to refer to
                                the version of BitBake you are using with
                                Toaster.
                                This name is never exposed through Toaster.
                                </para></listitem>
                            <listitem><para><emphasis>Git URL:</emphasis>
                                The URL (<filename>giturl</filename>)
                                for the BitBake Git repository cloned
                                for Toaster projects.
                                </para></listitem>
                            <listitem><para><emphasis>Branch:</emphasis>
                                The Git branch, or revision,
                                (<filename>branch</filename>) of the BitBake
                                repository used with Toaster.
                                </para></listitem>
                            <listitem><para><emphasis>Directory Path:</emphasis>
                                The sub-directory of the BitBake repository
                                (<filename>dirpath</filename>).
                                If the Git URL includes more than one
                                repository, you need to set this directory.
                                If the URL does not include more than a single
                                repository, you can set
                                <filename>dirpath</filename> to a null string
                                (i.e. "").
                                </para></listitem>
                        </itemizedlist>
                        </para></listitem>
                    <listitem><para><emphasis>Branch:</emphasis>
                        The branch for the layer source
                        (<filename>branch</filename>) used with the release.
                        For example, for the OpenEmbedded layer source, the
                        "master", "fido", and "dizzy" branches are available.
                        </para></listitem>
                    <listitem><para><emphasis>Default Layers:</emphasis>
                        The set of default layers
                        (<filename>defaultlayers</filename>) automatically
                        added to the project configuration when a project is
                        created.
                        </para></listitem>
                    <listitem><para><emphasis>Layer Source Priorities</emphasis>
                        A specification of
                        <link linkend='layer-source'>layer source</link>
                        priorities (<filename>layersourcepriority</filename>).
                        In order for Toaster to work as intended, the
                        "Imported layers" layer source should have the highest
                        priority, which means that layers manually imported by
                        users with the "Import layer" functionality will
                        always be visible and available for selection.
                        </para></listitem>
                    <listitem><para><emphasis>Help Text:</emphasis>
                        Help text (<filename>helptext</filename>) that explains
                        what the release does when selected.
                        This help text appears below the release drop-down
                        menu when you create a Toaster project.
                        The help text should assist users in making the correct
                        decision regarding the release to use for a given
                        project.
                        </para></listitem>
                </itemizedlist>
            </para>

            <para>
                To summarize what comprises a release, consider the following
                example from a Toaster JSON file.
                The configuration names the release "master" and uses the
                "master" branch provided by the layer source of type
                "layerindex", which is called "OpenEmbedded", and sets
                the <filename>openembedded-core</filename> layer as the one
                to be added by default to any projects created in Toaster.
                The BitBake version used would be defined as shown earlier
                in the previous list:
                <literallayout class='monospaced'>
     "releases": [
         {
             "name": "master",
             "description": "OpenEmbedded master",
             "bitbake": "master",
             "branch": "master",
             "defaultlayers": [ "openembedded-core" ],
             "layersourcepriority": { "Imported layers": 99, "Local OpenEmbedded" : 10, "OpenEmbedded" :  0 },
             "helptext": "Toaster will run your builds using the OpenEmbedded master branch, where active development takes place. This is not a stable branch, so your builds might not work as expected."
         }
     ]
                </literallayout>
            </para>
        </section>
    </section>

    <section id='toaster-json-files'>
        <title>JSON Files</title>

        <para>
            If you are going to be using Toaster in Build Mode, it must
            be initially configured before use.
            Configuration customizes layer source settings and Toaster defaults
            for all users and is performed by the person responsible for
            Toaster Configuration (i.e  the Toaster Administrator).
            The Toaster Administrator performs this configuration through the
            Django administration interface.
        </para>

        <para>
            To make it easier to initially start Toaster, you can import a
            pre-defined configuration file using the
            <link linkend='toaster-command-loadconf'><filename>loadconf</filename></link>
            command.
            <note>
                The configuration file is a JSON-formatted text file with
                specific fields that Toaster recognizes.
                It is not a data dump from the database, so it cannot be
                loaded directly in the database.
            </note>
        </para>

        <para>
            By convention, the supplied configuration files are named
            <filename>toasterconf.json</filename>.
            The Toaster Administrator can customize the file prior to loading
            it into Toaster.
            When you set up Toaster locally to run in Build Mode, the system
            startup script actively looks for compatible configuration files
            and prompts you to select a file to load if it detects that the
            database has not been configured.
        </para>

        <section id='json-file-choices'>
            <title>Configuration File Choices</title>

            <para>
                Three versions of the configuration file exist:
                <itemizedlist>
                    <listitem><para>
                        The
                        <filename>meta-yocto/conf/toasterconf.json</filename>
                        in the <filename>conf</filename> directory of the
                        Yocto Project's <filename>meta-yocto</filename> layer.
                        This version contains the default Yocto Project
                        configuration for Toaster.
                        You are prompted to select this file during the Toaster
                        set up process if you cloned the
                        <filename>poky</filename> repository (i.e.
                        <filename>&YOCTO_GIT_URL;/poky</filename>).
                        </para></listitem>
                    <listitem><para>
                        The <filename>meta/conf/toasterconf.json</filename>
                        in the <filename>conf</filename> directory of the
                        OpenEmbedded's <filename>openembedded-core</filename>
                        layer.
                        This version contains the default OpenEmbedded
                        configuration for Toaster.
                        You are prompted to select this file during the Toaster
                        set up process if you had cloned the
                        <filename>openembedded-core</filename> repository (i.e.
                        <filename>git://git.openembedded.org/openembedded-core</filename>).
                        </para></listitem>
                    <listitem><para>
                        The <filename>Toasterconf.json.txt.patch</filename>
                        located on the
                        <ulink url='https://wiki.yoctoproject.org/wiki/File:Toasterconf.json.txt.patch'>File:Toasterconf.json.txt.patch</ulink>
                        wiki page.
                        This version of the file is useful as a sample
                        configuration for when you want to set up Toaster as a
                        hosted service in Build Mode.
                        </para></listitem>
                </itemizedlist>
            </para>
        </section>

        <section id='json-structure'>
            <title>File Structure</title>

            <para>
                The <filename>toasterconf.json</filename> file consists of
                easily readable areas: configuration, layer sources, BitBake,
                default release, and releases.
            </para>

            <section id='json-config-area'>
                <title>Configuration Area</title>

                <para>
                    This area of the JSON file sets which variables are exposed
                    to users through the Toaster web interface.
                    Users can easily edit these variables.
                </para>

                <para>
                    The variables you set here are displayed in the
                    "Configuration variables" page in Toaster.
                    Minimally, you should set the
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
                    variable, which appears to users as part of the project
                    page in Toaster.
                </para>

                <para>
                    Here is the default <filename>config</filename> area:
                    <literallayout class='monospaced'>
     "config": {
         "MACHINE"      : "qemux86",
         "DISTRO"       : "poky",
         "IMAGE_FSTYPES": "ext3 jffs2 tar.bz2",
         "IMAGE_INSTALL_append": "",
         "PACKAGE_CLASSES": "package_rpm",
         "SDKMACHINE"   : "x86_64"
     },
                    </literallayout>
                </para>
            </section>

            <section id='json-layersources-area'>
                <title>Layer Sources Area</title>

                <para>
                    This area of the JSON file defines the
                    <link linkend='layer-source'>layer sources</link>
                    Toaster uses.
                    Toaster reads layer information from layer sources.
                    Three types of layer sources exist that Toaster
                    recognizes: Local, LayerIndex, and Imported.
                </para>

                <para>
                    The Local layer source reads layers from Git clones
                    available on your local drive.
                    Using a local layer source enables you to easily test
                    Toaster.
                    <note>
                        If you are setting up a hosted version of Toaster,
                        it does not make sense to have a local layer source.
                    </note>
                </para>

                <para>
                    The LayerIndex layer source uses a REST API exposed by
                    instances of the Layer Index application (e.g the public
                    <ulink url='http://layers.openembedded.org/'></ulink>)
                    to read layer data.
                </para>

                <para>
                    The Imported layer source is reserved for layer data
                    manually introduced by the user or Toaster Administrator
                    through the GUI.
                    This layer source lets users import their own layers
                    and build them with Toaster.
                    You should not remove the imported layer source.
                </para>

                <para>
                    Here is the default <filename>layersources</filename> area:
                    <literallayout class='monospaced'>
     "layersources": [
         {
             "name": "Local Yocto Project",
             "sourcetype": "local",
             "apiurl": "../../",
             "branches": ["HEAD", "master", "fido", "dizzy"],
             "layers": [
                 {
                     "name": "openembedded-core",
                     "local_path": "meta",
                     "vcs_url": "remote:origin",
                     "dirpath": "meta"
                 },
                 {
                     "name": "meta-yocto",
                     "local_path": "meta-yocto",
                     "vcs_url": "remote:origin",
                     "dirpath": "meta-yocto"
                 },
                 {
                     "name": "meta-yocto-bsp",
                     "local_path": "meta-yocto-bsp",
                     "vcs_url": "remote:origin",
                     "dirpath": "meta-yocto-bsp"
                 }

             ]
         },
         {
             "name": "OpenEmbedded",
             "sourcetype": "layerindex",
             "apiurl": "http://layers.openembedded.org/layerindex/api/",
             "branches": ["master", "fido", "dizzy"]
         },
         {
             "name": "Imported layers",
             "sourcetype": "imported",
             "apiurl": "",
             "branches": ["master", "fido", "dizzy", "HEAD"]

         }
     ],
                    </literallayout>
                </para>
            </section>

            <section id='json-bitbake-area'>
                <title>BitBake Area</title>

                <para>
                    This area of the JSON file defines the version of
                    BitBake Toaster uses.
                    As shipped, Toaster is configured to recognize four
                    versions of BitBake: master, fido, dizzy, and HEAD.
                    <note>
                        HEAD is a special option that builds whatever is
                        available on disk, without checking out any remote
                        Git repositories.
                    </note>
                </para>

                <para>
                    Here is the default <filename>bitbake</filename> area:
                    <literallayout class='monospaced'>
     "bitbake" : [
         {
             "name": "master",
             "giturl": "remote:origin",
             "branch": "master",
             "dirpath": "bitbake"
         },
         {
             "name": "fido",
             "giturl": "remote:origin",
             "branch": "fido",
            "dirpath": "bitbake"
        },
        {
             "name": "dizzy",
             "giturl": "remote:origin",
             "branch": "dizzy",
             "dirpath": "bitbake"
         },
         {
             "name": "HEAD",
             "giturl": "remote:origin",
             "branch": "HEAD",
             "dirpath": "bitbake"
         }
     ],
                    </literallayout>
                </para>
            </section>

            <section id='json-default-area'>
                <title>Default Area</title>

                <para>
                    This area of the JSON file establishes a default
                    release used by Toaster.
                    As shipped, Toaster uses the "master" release.
                </para>

                <para>
                    Here is the statement in the JSON file that establishes
                    the default release:
                    <literallayout class='monospaced'>
     "defaultrelease": "master",
                    </literallayout>
                </para>
            </section>

            <section id='json-releases-area'>
                <title>Releases Area</title>

                <para>
                    This area of the JSON file defines the versions of the
                    OpenEmbedded build system Toaster recognizes.
                    As shipped, Toaster is configured to work with the four
                    releases described in the
                    "<link linkend='toaster-releases-supported'>Pre-Configured Releases</link>"
                    section.
                </para>

                <para>
                    Here is the default <filename>releases</filename> area:
                    <literallayout class='monospaced'>
     "releases": [
         {
             "name": "master",
             "description": "Yocto Project master",
             "bitbake": "master",
             "branch": "master",
             "defaultlayers": [ "openembedded-core", "meta-yocto", "meta-yocto-bsp"],
             "layersourcepriority": { "Imported layers": 99, "Local Yocto Project" : 10, "OpenEmbedded" :  0 },
             "helptext": "Toaster will run your builds using the tip of the &lt;a href=\"http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/\"&gt;Yocto Project master branch&lt;/a&gt;, where active development takes place. This is not a stable branch, so your builds might not work as expected."
         },
         {
             "name": "fido",
             "description": "Yocto Project 1.8 Fido",
             "bitbake": "fido",
             "branch": "fido",
             "defaultlayers": [ "openembedded-core", "meta-yocto", "meta-yocto-bsp"],
             "layersourcepriority": { "Imported layers": 99, "Local Yocto Project" : 10, "OpenEmbedded" :  0 },
             "helptext": "Toaster will run your builds with the tip of the &lt;a href=\"http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=fido\"&gt;Yocto Project 1.8 \"Fido\"&lt;/a&gt; branch."
         },
         {
             "name": "dizzy",
             "description": "Yocto Project 1.7 Dizzy",
             "bitbake": "dizzy",
             "branch": "dizzy",
             "defaultlayers": [ "openembedded-core", "meta-yocto", "meta-yocto-bsp"],
             "layersourcepriority": { "Imported layers": 99, "Local Yocto Project" : 10, "OpenEmbedded" :  0 },
             "helptext": "Toaster will run your builds with the tip of the &lt;a href=\"http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=dizzy\"&gt;Yocto Project 1.7 \"Dizzy\"&lt;/a&gt; branch."
         },
         {
             "name": "local",
             "description": "Local Yocto Project",
             "bitbake": "HEAD",
             "branch": "HEAD",
             "defaultlayers": [ "openembedded-core", "meta-yocto", "meta-yocto-bsp"],
             "layersourcepriority": { "Imported layers": 99, "Local Yocto Project" : 10, "OpenEmbedded" :  0 },
             "helptext": "Toaster will run your builds with the version of the Yocto Project you have cloned or downloaded to your computer."
         }
     ]
                    </literallayout>
                </para>
            </section>
        </section>
    </section>

    <section id='toaster-useful-commands'>
        <title>Useful Commands</title>

        <para>
            In addition to the web user interface and the scripts that start
            and stop Toaster, command-line commands exist through the
            <filename>manage.py</filename> management script.
            You can find general documentation on
            <filename>manage.py</filename> at the
            <ulink url='https://docs.djangoproject.com/en/1.7/topics/settings/'>Django</ulink>
            site.
            However, several <filename>manage.py</filename> commands have been
            created that are specific to Toaster and are used to control
            configuration and back-end tasks.
            You can locate these commands in the
            <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
            (e.g. <filename>poky</filename>) at
            <filename>bitbake/lib/manage.py</filename>.
            This section documents those commands.
            <note>
                <para>
                    When using <filename>manage.py</filename> commands given
                    a default configuration, you must be sure that your
                    working directory is set to the
                    <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
                    Using <filename>manage.py</filename> commands from the
                    Build Directory allows Toaster to find the
                    <filename>toaster.sqlite</filename> file, which is located
                    in the Build Directory.
                </para>

                <para>
                    For non-default database configurations, it is possible
                    that you can use <filename>manage.py</filename> commands
                    from a directory other than the Build directory.
                    To do so, the
                    <filename>toastermain/settings.py</filename> file must be
                    configured to point to the correct database backend.
                </para>
            </note>
        </para>

        <section id='toaster-command-buildslist'>
            <title><filename>buildslist</filename></title>

            <para>
                The <filename>buildslist</filename> command lists all builds
                that Toaster has recorded.
                Access the command as follows:
                <literallayout class='monospaced'>
     $ bitbake/lib/toaster/manage.py buildslist
                </literallayout>
                The command returns a list, which includes numeric
                identifications, of the builds that Toaster has recorded in the
                current database.
            </para>

            <para>
                You need to run the <filename>buildslist</filename> command
                first to identify existing builds in the database before
                using the
                <link linkend='toaster-command-builddelete'><filename>builddelete</filename></link>
                command.
                Here is an example that assumes default repository and build
                directory names:
                <literallayout class='monospaced'>
     $ cd ~/poky/build
     $ python ../bitbake/lib/toaster/manage.py buildslist
                </literallayout>
                If your Toaster database had only one build, the above
                <filename>buildslist</filename> command would return something
                like the following:
                <literallayout class='monospaced'>
     1: qemux86 poky core-image-minimal
                </literallayout>
            </para>
        </section>

        <section id='toaster-command-builddelete'>
            <title><filename>builddelete</filename></title>

            <para>
                The <filename>builddelete</filename> command deletes data
                associated with a build.
                Access the command as follows:
                <literallayout class='monospaced'>
     $ bitbake/lib/toaster/manage.py builddelete <replaceable>build_id</replaceable>
                </literallayout>
                The command deletes all the build data for the specified
                <replaceable>build_id</replaceable>.
                This command is useful for removing old and unused data from
                the database.
            </para>

            <para>
                Prior to running the <filename>builddelete</filename>
                command, you need to get the ID associated with builds
                by using the
                <link linkend='toaster-command-buildslist'><filename>buildslist</filename></link>
                command.
            </para>
        </section>

        <section id='toaster-command-perf'>
            <title><filename>perf</filename></title>

            <para>
                The <filename>perf</filename> command measures Toaster
                performance.
                Access the command as follows:
                <literallayout class='monospaced'>
     $ bitbake/lib/toaster/manage.py perf
                </literallayout>
                The command is a sanity check that returns page loading
                times in order to identify performance problems.
            </para>
        </section>

        <section id='toaster-command-checksettings'>
            <title><filename>checksettings</filename></title>

            <para>
                The <filename>checksettings</filename> command verifies
                existing Toaster settings.
                Access the command as follows:
                <literallayout class='monospaced'>
     $ bitbake/lib/toaster/manage.py checksettings
                </literallayout>
                In Build Mode, Toaster uses settings that are based on the
                database to configure the building tasks.
                The <filename>checksettings</filename> command verifies that
                the database settings are valid in the sense that they have
                the minimal information needed to start a build.
            </para>

            <para>
                In order for the <filename>checksettings</filename> command
                to work, the database must be correctly set up and not have
                existing data.
                To be sure the database is ready, you can run the following:
                <literallayout class='monospaced'>
     $ bitbake/lib/toaster/mana​ge.py syncdb
     $ bitbake/lib/toaster/mana​ge.py migrate orm
     $ bitbake/lib/toaster/mana​ge.py migrate bldcontrol
                </literallayout>
                After running these commands, you can run the
                <filename>checksettings</filename> command.
            </para>
        </section>

        <section id='toaster-command-loadconf'>
            <title><filename>loadconf</filename></title>

            <para>
                The <filename>loadconf</filename> command loads an
                existing Toaster configuration file (JSON file).
                You must run this on a new database that does not have any
                data.
                Running this command on an existing database that has data
                results in errors.
                Access the command as follows:
                <literallayout class='monospaced'>
     $ bitbake/lib/toaster/manage.py loadconf <replaceable>filepath</replaceable>
                </literallayout>
                The <filename>loadconf</filename> command configures a database
                based on the supplied existing
                <filename>toasterconf.json</filename> file.
                For information on the <filename>toasterconf.json</filename>,
                see the
                "<link linkend='toaster-json-files'>JSON Files</link>"
                section.
            </para>
        </section>

        <section id='toaster-command-runbuilds'>
            <title><filename>runbuilds</filename></title>

            <para>
                The <filename>runbuilds</filename> command launches
                scheduled builds.
                Access the command as follows:
                <literallayout class='monospaced'>
     $ bitbake/lib/toaster/manage.py runbuilds
                </literallayout>
                The <filename>runbuilds</filename> command checks if
                scheduled builds exist in the database and then launches them
                per schedule.
                The command returns after the builds start but before they
                complete.
                The Toaster Logging Interface records and updates the database
                when the builds complete.
            </para>
        </section>
    </section>
</chapter>
