123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633 |
- .. SPDX-License-Identifier: CC-BY-SA-2.0-UK
- .. Set default pygment highlighting to 'shell' for this document
- .. highlight:: shell
- ****************************
- Setting Up and Using Toaster
- ****************************
- Starting Toaster for Local Development
- ======================================
- Once you have set up the Yocto Project and installed the Toaster system
- dependencies as described in the ":ref:`toaster-manual/start:Preparing to Use
- Toaster`" chapter, you are ready to start
- Toaster.
- Navigate to the root of your
- :term:`Source Directory` (e.g. ``poky``)::
- $ cd poky
- Once in that directory, source the build environment script::
- $ source oe-init-build-env
- Next, from the :term:`Build Directory` (e.g. ``poky/build``), start Toaster
- using this command::
- $ source toaster start
- You can now run your builds from the command line, or with Toaster
- as explained in section
- ":ref:`toaster-manual/setup-and-use:using the toaster web interface`".
- To access the Toaster web interface, open your favorite browser and
- enter the following::
- http://127.0.0.1:8000
- Setting a Different Port
- ========================
- By default, Toaster starts on port 8000. You can use the ``WEBPORT``
- parameter to set a different port. For example, the following command
- sets the port to "8400"::
- $ source toaster start webport=8400
- Setting Up Toaster Without a Web Server
- =======================================
- You can start a Toaster environment without starting its web server.
- This is useful for the following:
- - Capturing a command-line build's statistics into the Toaster database
- for examination later.
- - Capturing a command-line build's statistics when the Toaster server
- is already running.
- - Having one instance of the Toaster web server track and capture
- multiple command-line builds, where each build is started in its own
- "noweb" Toaster environment.
- The following commands show how to start a Toaster environment without
- starting its web server, perform BitBake operations, and then shut down
- the Toaster environment. Once the build is complete, you can close the
- Toaster environment. Before closing the environment, however, you should
- allow a few minutes to ensure the complete transfer of its BitBake build
- statistics to the Toaster database. If you have a separate Toaster web
- server instance running, you can watch this command-line build's
- progress and examine the results as soon as they are posted::
- $ source toaster start noweb
- $ bitbake target
- $ source toaster stop
- Setting Up Toaster Without a Build Server
- =========================================
- You can start a Toaster environment with the "New Projects" feature
- disabled. Doing so is useful for the following:
- - Sharing your build results over the web server while blocking others
- from starting builds on your host.
- - Allowing only local command-line builds to be captured into the
- Toaster database.
- Use the following command to set up Toaster without a build server::
- $ source toaster start nobuild webport=port
- Setting up External Access
- ==========================
- By default, Toaster binds to the loop back address (i.e. ``localhost``),
- which does not allow access from external hosts. To allow external
- access, use the ``WEBPORT`` parameter to open an address that connects
- to the network, specifically the IP address that your NIC uses to
- connect to the network. You can also bind to all IP addresses the
- computer supports by using the shortcut "0.0.0.0:port".
- The following example binds to all IP addresses on the host::
- $ source toaster start webport=0.0.0.0:8400
- This example binds to a specific IP address on the host's NIC::
- $ source toaster start webport=192.168.1.1:8400
- The Directory for Cloning Layers
- ================================
- Toaster creates a ``_toaster_clones`` directory inside your Source
- Directory (i.e. ``poky``) to clone any layers needed for your builds.
- Alternatively, if you would like all of your Toaster related files and
- directories to be in a particular location other than the default, you
- can set the ``TOASTER_DIR`` environment variable, which takes precedence
- over your current working directory. Setting this environment variable
- causes Toaster to create and use ``$TOASTER_DIR./_toaster_clones``.
- The Build Directory
- ===================
- Toaster creates a :term:`Build Directory` within your Source Directory (e.g.
- ``poky``) to execute the builds.
- Alternatively, if you would like all of your Toaster related files and
- directories to be in a particular location, you can set the
- ``TOASTER_DIR`` environment variable, which takes precedence over your
- current working directory. Setting this environment variable causes
- Toaster to use ``$TOASTER_DIR/build`` as the :term:`Build Directory`.
- Creating a Django Superuser
- ===========================
- Toaster is built on the `Django
- framework <https://www.djangoproject.com/>`__. Django provides an
- administration interface you can use to edit Toaster configuration
- parameters.
- To access the Django administration interface, you must create a
- superuser by following these steps:
- #. If you used ``pip3``, which is recommended, to set up the Toaster
- system dependencies, you need be sure the local user path is in your
- ``PATH`` list. To append the pip3 local user path, use the following
- command::
- $ export PATH=$PATH:$HOME/.local/bin
- #. From the directory containing the Toaster database, which by default
- is the :term:`Build Directory`, invoke the ``createsuperuser`` command from
- ``manage.py``::
- $ cd poky/build
- $ ../bitbake/lib/toaster/manage.py createsuperuser
- #. Django prompts you for the username, which you need to provide.
- #. Django prompts you for an email address, which is optional.
- #. Django prompts you for a password, which you must provide.
- #. Django prompts you to re-enter your password for verification.
- After completing these steps, the following confirmation message
- appears::
- Superuser created successfully.
- Creating a superuser allows you to access the Django administration
- interface through a browser. The URL for this interface is the same as
- the URL used for the Toaster instance with "/admin" on the end. For
- example, if you are running Toaster locally, use the following URL::
- http://127.0.0.1:8000/admin
- You can use the Django administration interface to set Toaster configuration
- parameters such as the :term:`Build Directory`, layer sources, default variable
- values, and BitBake versions.
- Setting Up a Production Instance of Toaster
- ===========================================
- You can use a production instance of Toaster to share the Toaster
- instance with remote users, multiple users, or both. The production
- instance is also the setup that can handle heavier loads on the web
- service. Use the instructions in the following sections to set up
- Toaster to run builds through the Toaster web interface.
- Requirements
- ------------
- Be sure you meet the following requirements:
- .. note::
- You must comply with all Apache, ``mod-wsgi``, and Mysql requirements.
- - Have all the build requirements as described in the ":ref:`toaster-manual/start:Preparing to
- Use Toaster`" chapter.
- - Have an Apache webserver.
- - Have ``mod-wsgi`` for the Apache webserver.
- - Use the Mysql database server.
- - If you are using Ubuntu, run the following::
- $ sudo apt install apache2 libapache2-mod-wsgi-py3 mysql-server python3-pip libmysqlclient-dev
- - If you are using Fedora or a RedHat distribution, run the
- following::
- $ sudo dnf install httpd python3-mod_wsgi python3-pip mariadb-server mariadb-devel python3-devel
- - If you are using openSUSE, run the following::
- $ sudo zypper install apache2 apache2-mod_wsgi-python3 python3-pip mariadb mariadb-client python3-devel
- Installation
- ------------
- Perform the following steps to install Toaster:
- #. Create toaster user and set its home directory to
- ``/var/www/toaster``::
- $ sudo /usr/sbin/useradd toaster -md /var/www/toaster -s /bin/false
- $ sudo su - toaster -s /bin/bash
- #. Checkout a copy of ``poky`` into the web server directory. You will
- be using ``/var/www/toaster``::
- $ git clone git://git.yoctoproject.org/poky
- $ git checkout &DISTRO_NAME_NO_CAP;
- #. Install Toaster dependencies using the ``--user`` flag which keeps the
- Python packages isolated from your system-provided packages::
- $ cd /var/www/toaster/
- $ pip3 install --user -r ./poky/bitbake/toaster-requirements.txt
- $ pip3 install --user mysqlclient
- .. note::
- Isolating these packages is not required but is recommended.
- Alternatively, you can use your operating system's package
- manager to install the packages.
- #. Configure Toaster by editing
- ``/var/www/toaster/poky/bitbake/lib/toaster/toastermain/settings.py``
- as follows:
- - Edit the
- `DATABASES <https://docs.djangoproject.com/en/2.2/ref/settings/#databases>`__
- settings:
- .. code-block:: python
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'toaster_data',
- 'USER': 'toaster',
- 'PASSWORD': 'yourpasswordhere',
- 'HOST': 'localhost',
- 'PORT': '3306',
- }
- }
- - Edit the
- `SECRET_KEY <https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-SECRET_KEY>`__:
- .. code-block:: python
- SECRET_KEY = 'your_secret_key'
- - Edit the
- `STATIC_ROOT <https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-STATIC_ROOT>`__:
- .. code-block:: python
- STATIC_ROOT = '/var/www/toaster/static_files/'
- #. Add the database and user to the ``mysql`` server defined earlier::
- $ mysql -u root -p
- mysql> CREATE DATABASE toaster_data;
- mysql> CREATE USER 'toaster'@'localhost' identified by 'yourpasswordhere';
- mysql> GRANT all on toaster_data.\* to 'toaster'@'localhost';
- mysql> quit
- #. Get Toaster to create the database schema, default data, and gather
- the statically-served files::
- $ cd /var/www/toaster/poky/
- $ ./bitbake/lib/toaster/manage.py migrate
- $ TOASTER_DIR=`pwd\` TEMPLATECONF='poky' \
- ./bitbake/lib/toaster/manage.py checksettings
- $ ./bitbake/lib/toaster/manage.py collectstatic
- In the previous
- example, from the ``poky`` directory, the ``migrate`` command
- ensures the database schema changes have propagated correctly (i.e.
- migrations). The next line sets the Toaster root directory
- ``TOASTER_DIR`` and the location of the Toaster configuration file
- ``TOASTER_CONF``, which is relative to ``TOASTER_DIR``. The
- :term:`TEMPLATECONF` value reflects the contents of
- ``poky/.templateconf``, and by default, should include the string
- "poky". For more information on the Toaster configuration file, see
- the ":ref:`toaster-manual/reference:Configuring Toaster`" section.
- This line also runs the ``checksettings`` command, which configures
- the location of the Toaster :term:`Build Directory`. The Toaster
- root directory ``TOASTER_DIR`` determines where the Toaster build
- directory is created on the file system. In the example above,
- ``TOASTER_DIR`` is set as follows::
- /var/www/toaster/poky
- This setting causes the Toaster :term:`Build Directory` to be::
- /var/www/toaster/poky/build
- Finally, the ``collectstatic`` command is a Django framework command
- that collects all the statically served files into a designated
- directory to be served up by the Apache web server as defined by
- ``STATIC_ROOT``.
- #. Test and/or use the Mysql integration with Toaster's Django web
- server. At this point, you can start up the normal Toaster Django
- web server with the Toaster database in Mysql. You can use this web
- server to confirm that the database migration and data population
- from the Layer Index is complete.
- To start the default Toaster Django web server with the Toaster
- database now in Mysql, use the standard start commands::
- $ source oe-init-build-env
- $ source toaster start
- Additionally, if Django is sufficient for your requirements, you can use
- it for your release system and migrate later to Apache as your
- requirements change.
- #. Add an Apache configuration file for Toaster to your Apache web
- server's configuration directory. If you are using Ubuntu or Debian,
- put the file here::
- /etc/apache2/conf-available/toaster.conf
- If you are using Fedora or RedHat, put it here::
- /etc/httpd/conf.d/toaster.conf
- If you are using openSUSE, put it here::
- /etc/apache2/conf.d/toaster.conf
- Here is a sample Apache configuration for Toaster you can follow:
- .. code-block:: apache
- Alias /static /var/www/toaster/static_files
- <Directory /var/www/toaster/static_files>
- <IfModule mod_access_compat.c>
- Order allow,deny
- Allow from all
- </IfModule>
- <IfModule !mod_access_compat.c>
- Require all granted
- </IfModule>
- </Directory>
- <Directory /var/www/toaster/poky/bitbake/lib/toaster/toastermain>
- <Files "wsgi.py">
- Require all granted
- </Files>
- </Directory>
- WSGIDaemonProcess toaster_wsgi python-path=/var/www/toaster/poky/bitbake/lib/toaster:/var/www/toaster/.local/lib/python3.4/site-packages
- WSGIScriptAlias / "/var/www/toaster/poky/bitbake/lib/toaster/toastermain/wsgi.py"
- <Location />
- WSGIProcessGroup toaster_wsgi
- </Location>
- If you are using Ubuntu or Debian, you will need to enable the config and
- module for Apache::
- $ sudo a2enmod wsgi
- $ sudo a2enconf toaster
- $ chmod +x bitbake/lib/toaster/toastermain/wsgi.py
- Finally, restart Apache to make sure all new configuration is loaded. For Ubuntu,
- Debian, and openSUSE use::
- $ sudo service apache2 restart
- For Fedora and RedHat use::
- $ sudo service httpd restart
- #. Prepare the systemd service to run Toaster builds. Here is a sample
- configuration file for the service:
- .. code-block:: ini
- [Unit]
- Description=Toaster runbuilds
- [Service]
- Type=forking User=toaster
- ExecStart=/usr/bin/screen -d -m -S runbuilds /var/www/toaster/poky/bitbake/lib/toaster/runbuilds-service.sh start
- ExecStop=/usr/bin/screen -S runbuilds -X quit
- WorkingDirectory=/var/www/toaster/poky
- [Install]
- WantedBy=multi-user.target
- Prepare the ``runbuilds-service.sh`` script that you need to place in the
- ``/var/www/toaster/poky/bitbake/lib/toaster/`` directory by setting
- up executable permissions::
- #!/bin/bash
- #export http_proxy=http://proxy.host.com:8080
- #export https_proxy=http://proxy.host.com:8080
- #export GIT_PROXY_COMMAND=$HOME/bin/gitproxy
- cd poky/
- source ./oe-init-build-env build
- source ../bitbake/bin/toaster $1 noweb
- [ "$1" == 'start' ] && /bin/bash
- #. Run the service::
- $ sudo service runbuilds start
- Since the service is running in a detached screen session, you can
- attach to it using this command::
- $ sudo su - toaster
- $ screen -rS runbuilds
- You can detach from the service again using "Ctrl-a" followed by "d" key
- combination.
- You can now open up a browser and start using Toaster.
- Using the Toaster Web Interface
- ===============================
- The Toaster web interface allows you to do the following:
- - Browse published layers in the :oe_layerindex:`OpenEmbedded Layer Index <>`
- that are available for your selected version of the build system.
- - Import your own layers for building.
- - Add and remove layers from your configuration.
- - Set configuration variables.
- - Select a target or multiple targets to build.
- - Start your builds.
- - See what was built (recipes and packages) and what packages were
- installed into your final image.
- - Browse the directory structure of your image.
- - See the value of all variables in your build configuration, and which
- files set each value.
- - Examine error, warning and trace messages to aid in debugging.
- - See information about the BitBake tasks executed and reused during
- your build, including those that used shared state.
- - See dependency relationships between recipes, packages and tasks.
- - See performance information such as build time, task time, CPU usage,
- and disk I/O.
- Toaster Web Interface Videos
- ----------------------------
- Here are several videos that show how to use the Toaster GUI:
- - *Build Configuration:* This
- `video <https://www.youtube.com/watch?v=qYgDZ8YzV6w>`__ overviews and
- demonstrates build configuration for Toaster.
- - *Build Custom Layers:* This
- `video <https://www.youtube.com/watch?v=QJzaE_XjX5c>`__ shows you how
- to build custom layers that are used with Toaster.
- - *Toaster Homepage and Table Controls:* This
- `video <https://www.youtube.com/watch?v=QEARDnrR1Xw>`__ goes over the
- Toaster entry page, and provides an overview of the data manipulation
- capabilities of Toaster, which include search, sorting and filtering
- by different criteria.
- - *Build Dashboard:* This
- `video <https://www.youtube.com/watch?v=KKqHYcnp2gE>`__ shows you the
- build dashboard, a page providing an overview of the information
- available for a selected build.
- - *Image Information:* This
- `video <https://www.youtube.com/watch?v=XqYGFsmA0Rw>`__ walks through
- the information Toaster provides about images: packages installed and
- root file system.
- - *Configuration:* This
- `video <https://www.youtube.com/watch?v=UW-j-T2TzIg>`__ provides
- Toaster build configuration information.
- - *Tasks:* This `video <https://www.youtube.com/watch?v=D4-9vGSxQtw>`__
- shows the information Toaster provides about the tasks run by the
- build system.
- - *Recipes and Packages Built:* This
- `video <https://www.youtube.com/watch?v=x-6dx4huNnw>`__ shows the
- information Toaster provides about recipes and packages built.
- - *Performance Data:* This
- `video <https://www.youtube.com/watch?v=qWGMrJoqusQ>`__ shows the
- build performance data provided by Toaster.
- Additional Information About the Local Yocto Project Release
- ------------------------------------------------------------
- This section only applies if you have set up Toaster for local
- development, as explained in the
- ":ref:`toaster-manual/setup-and-use:starting toaster for local development`"
- section.
- When you create a project in Toaster, you will be asked to provide a
- name and to select a Yocto Project release. One of the release options
- you will find is called "Local Yocto Project".
- .. image:: figures/new-project.png
- :align: center
- :scale: 75%
- When you select the "Local Yocto Project" release, Toaster will run your
- builds using the local Yocto Project clone you have in your computer:
- the same clone you are using to run Toaster. Unless you manually update
- this clone, your builds will always use the same Git revision.
- If you select any of the other release options, Toaster will fetch the
- tip of your selected release from the upstream :yocto_git:`Yocto Project
- repository <>` every time you run a build.
- Fetching this tip effectively means that if your selected release is
- updated upstream, the Git revision you are using for your builds will
- change. If you are doing development locally, you might not want this
- change to happen. In that case, the "Local Yocto Project" release might
- be the right choice.
- However, the "Local Yocto Project" release will not provide you with any
- compatible layers, other than the three core layers that come with the
- Yocto Project:
- - :oe_layer:`openembedded-core </openembedded-core>`
- - :oe_layer:`meta-poky </meta-poky>`
- - :oe_layer:`meta-yocto-bsp </meta-yocto-bsp>`
- .. image:: figures/compatible-layers.png
- :align: center
- :scale: 75%
- If you want to build any other layers, you will need to manually import
- them into your Toaster project, using the "Import layer" page.
- .. image:: figures/import-layer.png
- :align: center
- :scale: 75%
- Building a Specific Recipe Given Multiple Versions
- --------------------------------------------------
- Occasionally, a layer might provide more than one version of the same
- recipe. For example, the ``openembedded-core`` layer provides two
- versions of the ``bash`` recipe (i.e. 3.2.48 and 4.3.30-r0) and two
- versions of the ``which`` recipe (i.e. 2.21 and 2.18). The following
- figure shows this exact scenario:
- .. image:: figures/bash-oecore.png
- :align: center
- :scale: 75%
- By default, the OpenEmbedded build system builds one of the two recipes.
- For the ``bash`` case, version 4.3.30-r0 is built by default.
- Unfortunately, Toaster as it exists, is not able to override the default
- recipe version. If you would like to build bash 3.2.48, you need to set
- the
- :term:`PREFERRED_VERSION`
- variable. You can do so from Toaster, using the "Add variable" form,
- which is available in the "BitBake variables" page of the project
- configuration section as shown in the following screen:
- .. image:: figures/add-variable.png
- :align: center
- :scale: 75%
- To specify ``bash`` 3.2.48 as the version to build, enter
- "PREFERRED_VERSION_bash" in the "Variable" field, and "3.2.48" in the
- "Value" field. Next, click the "Add variable" button:
- .. image:: figures/set-variable.png
- :align: center
- :scale: 75%
- After clicking the "Add variable" button, the settings for
- :term:`PREFERRED_VERSION` are added to the bottom of the BitBake variables
- list. With these settings, the OpenEmbedded build system builds the
- desired version of the recipe rather than the default version:
- .. image:: figures/variable-added.png
- :align: center
- :scale: 75%
|