<!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; ] >
<!--SPDX-License-Identifier: CC-BY-2.0-UK-->

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

<title>Preparing to Use Toaster</title>

    <para>
        This chapter describes how you need to prepare your system in order to
        use Toaster.
    </para>

    <section id='toaster-setting-up-the-basic-system-requirements'>
        <title>Setting Up the Basic System Requirements</title>

        <para>
            Before you can use Toaster, you need to first set up your
            build system to run the Yocto Project.
            To do this, follow the instructions in the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-preparing-the-build-host'>Preparing the Build Host</ulink>"
            section of the Yocto Project Development Tasks
            Manual.
 	    For Ubuntu/Debian, you might also need to do an additional install
            of pip3.
                <literallayout class='monospaced'>
     $ sudo apt-get install python3-pip
                </literallayout>
        </para>
    </section>

    <section id='toaster-establishing-toaster-system-dependencies'>
        <title>Establishing Toaster System Dependencies</title>

        <para>
            Toaster requires extra Python dependencies in order to run.
            A Toaster requirements file named
            <filename>toaster-requirements.txt</filename> defines the
            Python dependencies.
            The requirements file is located in the
            <filename>bitbake</filename> directory, which is located in the
            root directory of the
            <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
            (e.g. <filename>poky/bitbake/toaster-requirements.txt</filename>).
            The dependencies appear in a <filename>pip</filename>,
            install-compatible format.
        </para>

        <section id='toaster-load-packages'>
            <title>Install Toaster Packages</title>

            <para>
                You need to install the packages that Toaster requires.
                Use this command:
                <literallayout class='monospaced'>
     $ pip3 install --user -r bitbake/toaster-requirements.txt
                </literallayout>
                The previous command installs the necessary Toaster modules
                into a local python 3 cache in your
                <filename>$HOME</filename> directory.
                The caches is actually located in
                <filename>$HOME/.local</filename>.
                To see what packages have been installed into your
                <filename>$HOME</filename> directory, do the following:
                <literallayout class='monospaced'>
     $ pip3 list installed --local
                </literallayout>
                If you need to remove something, the following works:
                <literallayout class='monospaced'>
     $ pip3 uninstall PackageNameToUninstall
                </literallayout>
            </para>
        </section>

<!-- Commenting this section out for now in case it needs to be used again.

        <section id='toaster-install-daemon'>
            <title>Install <filename>daemon</filename></title>

            <para>
                Toaster depends on
                <ulink url='http://www.libslack.org/daemon/'><filename>daemon</filename></ulink>.
                Depending on your distribution, how you install
                <filename>daemon</filename> differs:
                <itemizedlist>
                    <listitem><para><emphasis>Debian-Based Systems:</emphasis>
                        If you are running a Debian-based distribution,
                        install <filename>daemon</filename> using the
                        following command:
                        <literallayout class='monospaced'>
     $ sudo apt-get install daemon​
                        </literallayout>
                        </para></listitem>
                    <listitem><para><emphasis>Non-Debian-Based Systems:</emphasis>
                        If you are not running a Debian-based distribution
                        (Redhat-based distribution such as Fedora),
                        you need to download ​the file relevant to the
                        architecture and then install
                        <filename>daemon</filename> manually.
                        Following are the commands for 64-bit distributions:
                        <literallayout class='monospaced'>
     $ wget http://libslack.org/daemon/download/daemon-0.6.4-1.x86_64.rpm
     $ sudo rpm -i daemon-0.6.4-1.x86_64.rpm
                        </literallayout>
                        Here are the commands for a 32-bit distribution:
                        <literallayout class='monospaced'>
     $ wget http://libslack.org/daemon/download/daemon-0.6.4-1.i686.rpm
     $ sudo rpm -i ​daemon-0.6.4-1.i686.rpm​
                        </literallayout>
                        </para></listitem>
                </itemizedlist>
            </para>
        </section> -->
    </section>
</chapter>
