<!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='ref-manual-system-requirements'>
<title>System Requirements</title>

    <para>
        Welcome to the Yocto Project Reference Manual!
        This manual provides reference information for the current release
        of the Yocto Project.
        The manual is best used after you have an understanding
        of the basics of the Yocto Project.
        The manual is neither meant to be read as a starting point to the
        Yocto Project nor read from start to finish.
        Use this manual to find variable definitions, class
        descriptions, and so forth as needed during the course of using
        the Yocto Project.
    </para>

    <para>
        For introductory information on the Yocto Project, see the
        <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink> and the
        "<ulink url='&YOCTO_DOCS_OM_URL;#overview-development-environment'>Yocto Project Development Environment</ulink>"
        chapter in the Yocto Project Overview and Concepts Manual.
    </para>

    <para>
        If you want to use the Yocto Project to quickly build an image
        without having to understand concepts, work through the
        <ulink url='&YOCTO_DOCS_BRIEF_URL;'>Yocto Project Quick Build</ulink>
        document.
        You can find "how-to" information in the
        <ulink url='&YOCTO_DOCS_DEV_URL;'>Yocto Project Development Tasks Manual</ulink>.
        You can find Yocto Project overview and conceptual information in the
        <ulink url='&YOCTO_DOCS_OM_URL;'>Yocto Project Overview and Concepts Manual</ulink>.
        <note><title>Tip</title>
            For more information about the Yocto Project Documentation set,
            see the
            "<link linkend='resources-links-and-related-documentation'>Links and Related Documentation</link>"
            section.
        </note>
    </para>

    <section id='detailed-supported-distros'>
        <title>Supported Linux Distributions</title>

        <para>
            Currently, the Yocto Project is supported on the following
            distributions:
            <note><title>Notes</title>
                <itemizedlist>
                    <listitem><para>
                        Yocto Project releases are tested against the stable
                        Linux distributions in the following list.
                        The Yocto Project should work on other distributions but
                        validation is not performed against them.
                        </para></listitem>
                    <listitem><para>
                        In particular, the Yocto Project does not support
                        and currently has no plans to support
                        rolling-releases or development distributions due to
                        their constantly changing nature.
                        We welcome patches and bug reports, but keep in mind
                        that our priority is on the supported platforms listed
                        below.
                        </para></listitem>
                    <listitem><para>
                        If you encounter problems, please go to
                        <ulink url='&YOCTO_BUGZILLA_URL;'>Yocto Project Bugzilla</ulink>
                        and submit a bug.
                        We are interested in hearing about your experience.
                        For information on how to submit a bug, see the
                        Yocto Project
                        <ulink url='&YOCTO_WIKI_URL;/wiki/Bugzilla_Configuration_and_Bug_Tracking'>Bugzilla wiki page</ulink>
                        and the
                        "<ulink url='&YOCTO_DOCS_DEV_URL;#submitting-a-defect-against-the-yocto-project'>Submitting a Defect Against the Yocto Project</ulink>"
                        section in the Yocto Project Development Tasks Manual.
                        </para></listitem>
                </itemizedlist>
            </note>
            <itemizedlist>
<!--
                <listitem><para>Ubuntu 10.04</para></listitem>
                <listitem><para>Ubuntu 11.10</para></listitem>
                <listitem><para>Ubuntu 12.04 (LTS)</para></listitem>
                <listitem><para>Ubuntu 13.10</para></listitem>
                <listitem><para>Ubuntu 14.04 (LTS)</para></listitem> -->
                <listitem><para>Ubuntu 14.10</para></listitem>
                <listitem><para>Ubuntu 15.04</para></listitem>
                <listitem><para>Ubuntu 15.10</para></listitem>
                <listitem><para>Ubuntu 16.04 (LTS)</para></listitem>
<!--                <listitem><para>Fedora 16 (Verne)</para></listitem>
                <listitem><para>Fedora 17 (Spherical)</para></listitem>
                <listitem><para>Fedora release 19 (Schrödinger's Cat)</para></listitem>
                <listitem><para>Fedora release 20 (Heisenbug)</para></listitem> -->
                <listitem><para>Fedora release 22</para></listitem>
                <listitem><para>Fedora release 23</para></listitem>
<!--                <listitem><para>Fedora release 24</para></listitem>
                <listitem><para>CentOS release 5.6 (Final)</para></listitem>
                <listitem><para>CentOS release 5.7 (Final)</para></listitem>
                <listitem><para>CentOS release 5.8 (Final)</para></listitem>
                <listitem><para>CentOS release 6.3 (Final)</para></listitem>
                <listitem><para>CentOS release 6.x</para></listitem> -->
                <listitem><para>CentOS release 7.x</para></listitem>
<!--                <listitem><para>Debian GNU/Linux 6.0 (Squeeze)</para></listitem>
                <listitem><para>Debian GNU/Linux 7.x (Wheezy)</para></listitem> -->
                <listitem><para>Debian GNU/Linux 8.x (Jessie)</para></listitem>
                <listitem><para>Debian GNU/Linux 9.x (Stretch)</para></listitem>
<!--                <listitem><para>Debian GNU/Linux 7.1 (Wheezy)</para></listitem>
                <listitem><para>Debian GNU/Linux 7.2 (Wheezy)</para></listitem>
                <listitem><para>Debian GNU/Linux 7.3 (Wheezy)</para></listitem>
                <listitem><para>Debian GNU/Linux 7.4 (Wheezy)</para></listitem>
                <listitem><para>Debian GNU/Linux 7.5 (Wheezy)</para></listitem>
                <listitem><para>Debian GNU/Linux 7.6 (Wheezy)</para></listitem> -->
<!--                <listitem><para>openSUSE 11.4</para></listitem>
                <listitem><para>openSUSE 12.1</para></listitem>
                <listitem><para>openSUSE 12.2</para></listitem>
                <listitem><para>openSUSE 12.3</para></listitem>
                <listitem><para>openSUSE 13.1</para></listitem> -->
                <listitem><para>openSUSE 13.2</para></listitem>
                <listitem><para>openSUSE 42.1</para></listitem>
            </itemizedlist>
        </para>

        <note>
            While the Yocto Project Team attempts to ensure all Yocto Project
            releases are one hundred percent compatible with each officially
            supported Linux distribution, instances might exist where you
            encounter a problem while using the Yocto Project on a specific
            distribution.
        </note>
    </section>

    <section id='required-packages-for-the-host-development-system'>
    <title>Required Packages for the Host Development System</title>

        <para>
            The list of packages you need on the host development system can
            be large when covering all build scenarios using the Yocto Project.
            This section provides required packages according to
            Linux distribution and function.
        </para>

        <section id='ubuntu-packages'>
            <title>Ubuntu and Debian</title>

            <para>
                The following list shows the required packages by function
                given a supported Ubuntu or Debian Linux distribution:
                <note>
                    If your build system has the
                    <filename>oss4-dev</filename> package installed, you
                    might experience QEMU build failures due to the package
                    installing its own custom
                    <filename>/usr/include/linux/soundcard.h</filename> on
                    the Debian system.
                    If you run into this situation, either of the following
                    solutions exist:
                    <literallayout class='monospaced'>
     $ sudo apt-get build-dep qemu
     $ sudo apt-get remove oss4-dev
                    </literallayout>
                 </note>
                <itemizedlist>
                    <listitem><para><emphasis>Essentials:</emphasis>
                        Packages needed to build an image on a headless
                        system:
                        <literallayout class='monospaced'>
     $ sudo apt-get install &UBUNTU_HOST_PACKAGES_ESSENTIAL;
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
                        Packages recommended if the host system has graphics
                        support or if you are going to use the Eclipse
                        IDE:
                        <literallayout class='monospaced'>
     $ sudo apt-get install libsdl1.2-dev xterm
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>Documentation:</emphasis>
                        Packages needed if you are going to build out the
                        Yocto Project documentation manuals:
                        <literallayout class='monospaced'>
     $ sudo apt-get install make xsltproc docbook-utils fop dblatex xmlto
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>OpenEmbedded Self-Test (<filename>oe-selftest</filename>):</emphasis>
                        Packages needed if you are going to run
                        <filename>oe-selftest</filename>:
                        <literallayout class='monospaced'>
     $ sudo apt-get install python-git
                        </literallayout>
                        </para></listitem>
                </itemizedlist>
            </para>
        </section>

        <section id='fedora-packages'>
            <title>Fedora Packages</title>

            <para>
                The following list shows the required packages by function
                given a supported Fedora Linux distribution:
                <itemizedlist>
                    <listitem><para><emphasis>Essentials:</emphasis>
                        Packages needed to build an image for a headless
                        system:
                        <literallayout class='monospaced'>
     $ sudo dnf install &FEDORA_HOST_PACKAGES_ESSENTIAL;
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
                        Packages recommended if the host system has graphics
                        support or if you are going to use the Eclipse
                        IDE:
                        <literallayout class='monospaced'>
     $ sudo dnf install SDL-devel xterm
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>Documentation:</emphasis>
                        Packages needed if you are going to build out the
                        Yocto Project documentation manuals:
                        <literallayout class='monospaced'>
     $ sudo dnf install make docbook-style-dsssl docbook-style-xsl \
     docbook-dtds docbook-utils fop libxslt dblatex xmlto
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>OpenEmbedded Self-Test (<filename>oe-selftest</filename>):</emphasis>
                        Packages needed if you are going to run
                        <filename>oe-selftest</filename>:
                        <literallayout class='monospaced'>
     $ sudo dnf install python3-GitPython
                        </literallayout>
                        </para></listitem>
                </itemizedlist>
            </para>
        </section>

        <section id='opensuse-packages'>
            <title>openSUSE Packages</title>

            <para>
                The following list shows the required packages by function
                given a supported openSUSE Linux distribution:
                <itemizedlist>
                    <listitem><para><emphasis>Essentials:</emphasis>
                        Packages needed to build an image for a headless
                        system:
                        <literallayout class='monospaced'>
     $ sudo zypper install &OPENSUSE_HOST_PACKAGES_ESSENTIAL;
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
                        Packages recommended if the host system has graphics
                        support or if you are going to use the Eclipse
                        IDE:
                        <literallayout class='monospaced'>
     $ sudo zypper install libSDL-devel xterm
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>Documentation:</emphasis>
                        Packages needed if you are going to build out the
                        Yocto Project documentation manuals:
                        <literallayout class='monospaced'>
     $ sudo zypper install make dblatex xmlto
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>OpenEmbedded Self-Test (<filename>oe-selftest</filename>):</emphasis>
                        Packages needed if you are going to run
                        <filename>oe-selftest</filename>:
                        <literallayout class='monospaced'>
     $ sudo zypper install python-GitPython
                        </literallayout></para></listitem>
                </itemizedlist>
                <note>
                    Sanity testing, through the
                    <link linkend='ref-classes-testimage*'>testimage</link>
                    classes, does not work on systems using the
                    <ulink url='https://en.opensuse.org/Portal:Wicked'>Wicked</ulink>
                    network manager.
                </note>
            </para>
        </section>

        <section id='centos-packages'>
            <title>CentOS Packages</title>

            <para>
                The following list shows the required packages by function
                given a supported CentOS Linux distribution:
                <itemizedlist>
                    <listitem><para><emphasis>Essentials:</emphasis>
                        Packages needed to build an image for a headless
                        system:
                        <literallayout class='monospaced'>
     $ sudo yum install &CENTOS_HOST_PACKAGES_ESSENTIAL; SDL-devel xterm
                        </literallayout>
                        <note><title>Notes</title>
                            <itemizedlist>
                                <listitem><para>
                                    Extra Packages for Enterprise Linux
                                    (i.e. <filename>epel-release</filename>)
                                    is a collection of packages from Fedora
                                    built on RHEL/CentOS for easy installation
                                    of packages not included in enterprise
                                    Linux by default.
                                    You need to install these packages
                                    separately.
                                    </para></listitem>
                                <listitem><para>
                                    The <filename>makecache</filename> command
                                    consumes additional Metadata from
                                    <filename>epel-release</filename>.
                                    </para></listitem>
                            </itemizedlist>
                        </note>
                        </para></listitem>
                    <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
                        Packages recommended if the host system has graphics
                        support or if you are going to use the Eclipse
                        IDE:
                        <literallayout class='monospaced'>
     $ sudo yum install SDL-devel xterm
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>Documentation:</emphasis>
                        Packages needed if you are going to build out the
                        Yocto Project documentation manuals:
                        <literallayout class='monospaced'>
     $ sudo yum install make docbook-style-dsssl docbook-style-xsl \
     docbook-dtds docbook-utils fop libxslt dblatex xmlto
                        </literallayout></para></listitem>
                    <listitem><para><emphasis>OpenEmbedded Self-Test (<filename>oe-selftest</filename>):</emphasis>
                        Packages needed if you are going to run
                        <filename>oe-selftest</filename>:
                        <literallayout class='monospaced'>
     $ sudo yum install GitPython
                        </literallayout>
                        </para></listitem>
                </itemizedlist>
            </para>
        </section>
    </section>

    <section id='required-git-tar-and-python-versions'>
        <title>Required Git, tar, and Python Versions</title>

        <para>
            In order to use the build system, your host development system
            must meet the following version requirements 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>
        </para>

        <para>
            If your host development system does not meet all these requirements,
            you can resolve this by installing a <filename>buildtools</filename>
            tarball that contains these tools.
            You can get the tarball one of two ways: download a pre-built
            tarball or use BitBake to build the tarball.
        </para>

        <section id='downloading-a-pre-built-buildtools-tarball'>
            <title>Downloading a Pre-Built <filename>buildtools</filename> Tarball</title>

            <para>
                Downloading and running a pre-built buildtools installer is
                the easiest of the two methods by which you can get these tools:
                <orderedlist>
                    <listitem><para>
                        Locate and download the <filename>*.sh</filename> at
                        <ulink url='&YOCTO_DL_URL;/releases/yocto/yocto-&DISTRO;/buildtools/'></ulink>.
                        </para></listitem>
                    <listitem><para>
                        Execute the installation script.
                        Here is an example:
                        <literallayout class='monospaced'>
     $ sh ~/Downloads/x86_64-buildtools-nativesdk-standalone-&DISTRO;.sh
                        </literallayout>
                        During execution, a prompt appears that allows you to
                        choose the installation directory.
                        For example, you could choose the following:
                        <literallayout class='monospaced'>
     /home/<replaceable>your-username</replaceable>/buildtools
                        </literallayout>
                        </para></listitem>
                    <listitem><para>
                        Source the tools environment setup script by using a
                        command like the following:
                        <literallayout class='monospaced'>
     $ source /home/<replaceable>your_username</replaceable>/buildtools/environment-setup-i586-poky-linux
                        </literallayout>
                        Of course, you need to supply your installation directory and be
                        sure to use the right file (i.e. i585 or x86-64).
                        </para>
                        <para>
                        After you have sourced the setup script,
                        the tools are added to <filename>PATH</filename>
                        and any other environment variables required to run the
                        tools are initialized.
                        The results are working versions versions of Git, tar,
                        Python and <filename>chrpath</filename>.
                        </para></listitem>
                </orderedlist>
            </para>
        </section>

        <section id='building-your-own-buildtools-tarball'>
            <title>Building Your Own <filename>buildtools</filename> Tarball</title>

            <para>
                Building and running your own buildtools installer applies
                only when you have a build host that can already run BitBake.
                In this case, you use that machine to build the
                <filename>.sh</filename> file and then
                take steps to transfer and run it on a
                machine that does not meet the minimal Git, tar, and Python
                requirements.
            </para>

            <para>
                Here are the steps to take to build and run your own
                buildtools installer:
                <orderedlist>
                    <listitem><para>
                        On the machine that is able to run BitBake,
                        be sure you have set up your build environment with
                        the setup script
                        (<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>).
                        </para></listitem>
                    <listitem><para>
                        Run the BitBake command to build the tarball:
                        <literallayout class='monospaced'>
     $ bitbake buildtools-tarball
                        </literallayout>
                        <note>
                        The
                        <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>
                        variable in your <filename>local.conf</filename> file
                        determines whether you build tools for a 32-bit
                        or 64-bit system.
                       </note>
                       Once the build completes, you can find the
                       <filename>.sh</filename> file that installs
                       the tools in the <filename>tmp/deploy/sdk</filename>
                       subdirectory of the
                       <link linkend='build-directory'>Build Directory</link>.
                       The installer file has the string "buildtools"
                       in the name.
                       </para></listitem>
                   <listitem><para>
                       Transfer the <filename>.sh</filename> file from the
                       build host to the machine that does not meet the
                       Git, tar, or Python requirements.
                       </para></listitem>
                   <listitem><para>
                       On the machine that does not meet the requirements,
                       run the <filename>.sh</filename> file
                       to install the tools.
                       Here is an example:
                       <literallayout class='monospaced'>
     $ sh ~/Downloads/x86_64-buildtools-nativesdk-standalone-&DISTRO;.sh
                       </literallayout>
                       During execution, a prompt appears that allows you to
                       choose the installation directory.
                       For example, you could choose the following:
                       <literallayout class='monospaced'>
     /home/<replaceable>your_username</replaceable>/buildtools
                       </literallayout>
                       </para></listitem>
                    <listitem><para>
                        Source the tools environment setup script by using a
                        command like the following:
                        <literallayout class='monospaced'>
     $ source /home/<replaceable>your_username</replaceable>/buildtools/environment-setup-i586-poky-linux
                        </literallayout>
                        Of course, you need to supply your installation directory and be
                        sure to use the right file (i.e. i585 or x86-64).
                        </para>
                        <para>
                        After you have sourced the setup script,
                        the tools are added to <filename>PATH</filename>
                        and any other environment variables required to run the
                        tools are initialized.
                        The results are working versions versions of Git, tar,
                        Python and <filename>chrpath</filename>.
                        </para></listitem>
                </orderedlist>
            </para>
        </section>
    </section>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
