Recipes ======= Structure --------- The main structure is divided into four modules: - base recipes - connectivity recipes - core recipes - extended recipes Below there is graphical illustration of the layer structure. .. code-block:: meta-golemos ├── README ├── conf │   ├── bblayers.conf.sample │   ├── conf-notes.txt │   ├── distro │   │   └── golemos.conf │   ├── layer.conf │   └── local.conf.sample ├── recipes-base │   ├── datalogger-api-request │   │   └── datalogger-api-request.bb │   ├── datalogger-main-page │   │   └── datalogger-main-page.bb │   ├── datalogger-setup-page │   │   └── datalogger-setup-page.bb │   ├── nginx │   │   ├── files │   │   │   ├── datalogger-setup.local │   │   │   └── datalogger.local │   │   └── nginx_%.bbappend │   ├── python3-gunicorn │   │   ├── files │   │   │   ├── datalogger_setup_page.service │   │   │   └── datalogger_setup_page.socket │   │   └── python3-gunicorn_%.bbappend │   └── python3-mfrc522 │   └── python3-mfrc522_0.0.7.bb ├── recipes-connectivity │   ├── hostapd │   │   ├── files │   │   │   ├── hostapd@.service │   │   │   └── wlan0.conf │   │   └── hostapd_%.bbappend │   ├── kea │   │   ├── files │   │   │   ├── kea-dhcp4.conf │   │   │   └── kea-dhcp4.service │   │   └── kea_%.bbappend │   └── wpa-supplicant │   ├── files │   │   └── wpa_supplicant-nl80211-wlan0.conf │   └── wpa-supplicant_%.bbappend └── recipes-core ├── images │   ├── datalogger-dev-image.bb │   ├── datalogger-extended-image.bb │   └── datalogger-image.bb ├── packagegroups │   ├── datalogger-base-packagegroup.bb │   ├── datalogger-core-packagegroup.bb │   ├── datalogger-dev-packagegroup.bb │   └── datalogger-extended-packagegroup.bb ├── systemd │   └── systemd_%.bbappend └── systemd-conf ├── files │   └── wlan.network └── systemd-conf_%.bbappend Recipes description ------------------- Here you will find detailed description of each module as well as of recipes included in them. Core recipes ^^^^^^^^^^^^ Core recipes are most important recipes of all. Without them you can not be able to build any custom image. Currently are three version of images: - production image, - extended version of production image, - development image. This recipes also contain package groups. Groups are divided into parts to distinguish: - core packages needed to build system, - base packages needed for the proper functioning of the system, - extended packages added for system extensions, - dev packages which are currently under development and have not yet made it into the basic packages. This sets of recipes are pivotal to custom systems. They include recipes to build custom images as well as package groups. Images """""" There are three different types of image. Production image This image is primary for the each device. It contain basic functionalities of the system with guarantee of stability. Extended version of production image This image type is practically the production image but it also has some packages which is not required for basic system functionalities such as ``vim`` or ``git``. Development image This image type consists of basic packages and the functionality of the system and some of newer versions of packages as well as packages that are currently under development and have not been released yet. Package groups """""""""""""" Second type of recipes in this set is package groups. This instructions allow to control sets of packages that are required to install. It also allows for greater control of what is required in a given version of the image. Base packages Base package group contain packages required for basic functionality of the device. Removing this package group allow to compile system but it will not have any functionality. Core packages Without core packages basic functionality of the system is impossible. This package group is required in every system version. It contains packages such as ``systemd`` or drivers for wireless card. Extended packages This packages are not necessary for base system, but can add some nice touch. Development packages This package group consists of packages that are currently under development and have not made into base or extended version of system yet. Recipes """"""" systemd This recipe ensure that ``wpa_supplicant`` have proper dependency. It enable ``networkd`` and ``resolved``. In order to see how this recipe impact on ``wpa_supplicant`` see tutorial in :doc:`step guide (extended) about wireless connection `. systemd-conf For now this recipe is connected with ``wpa_supplicant`` recipe. It place in appropriate folders network configuration files. To learn how it is connected with wireless network tool see :doc:`step guide (extended) about wireless connection `. Base recipes ^^^^^^^^^^^^ Base recipes for now contain instructions for building basic functionalities of Datalogger OS. In this set of instruction, you can find recipes for web server or hardware functionality like buttons or RFID scanner. datalogger-api-request To computer board there are four buttons connected. Two of them are responsible for sending information to custom API. Two other ones are directly connected to board and control behaviour of wireless setup or rebooting system. This recipe take script from external `api repository`_ and program this functionality. .. note:: This recipe depends directly on ``python3-mfrc522``. .. _api repository: https://gitlab.sclabs.io/golemos/datalogger/api-request datalogger-main-page After setting up device and connecting to proper wireless network the setup page is switched with main webpage. This recipe place source files for this website from external `main page repository`_. Destination of source files is ``/var/www/datalogger.local``. .. _main page repository: https://gitlab.sclabs.io/golemos/datalogger/main-page datalogger-setup-page To setup device and it's connection to wireless network this recipe arose. This instructions place website's source files in ``/var/www/datalogger-setup.local``. Source files are fetched from external `setup page repository`_. In this repository there is also script which configure connection to wireless network and restart services to disable hotspot mode. This page is displayed only in hotspot mode. .. _setup page repository: https://gitlab.sclabs.io/golemos/datalogger/setup-page nginx To serve two websites, ``nginx`` web server was configured. This recipe add configuration files to it's destinations and enable server on boot. Important this is also that is remove default nginx website from ``sites-enabled`` and place setup page as default on boot. To see detailed instructions about configuring web server check :doc:`step by step guide (extended) about configuring web server `. .. note:: This recipe depends directly on socket configured in ``python3-gunicorn`` as well as diroctory for main website. python3-gunicorn ``gunicorn`` is a WSGI server for Python apps. Setup page is written in flask and needs such a service. This recipe add WSGI server and as well setup service (``datalogger_setup_page.service``) with socket (``datalogger_setup_page.socket``) to listen on. To see how this was set up check :doc:`step by step guide (extended) about WSGI server `. .. note:: This recipe depends directly on location of setup page. python3-mfrc522 To board a RFID scanner is connected. To allow programming it from python script you need compatibility layer. This recipe pull module from `pypi website`_. In order to learn how to set up such a thing check out :doc:`step by step guide (extended) about implementing custom Python packages in yocto `. .. _pypi website: https://pypi.org/project/mfrc522/ Connectivity recipes ^^^^^^^^^^^^^^^^^^^^ The recipes in this folder are designed to enable wireless or wired connectivity. Some of them link directly to core recipes. Connectivity recipes should not be used without core recipes. hostapd The recipe is used to create initial hotspot. It allow to connect directly to the device and sent to it information about network to which it will be connected. Full how to about creating hotspot is in :doc:`step by step guide (extended) about creating hotspot `. .. note:: This recipe works with relation with ``kea``. Do not use them separately. kea This recipe enable DHCP server for hotspot mode. It has some custom configuration not to wait till network is online, but only wait for interface to be up. Full how to about creating hotspot is in :doc:`step by step guide (extended) about creating hotspot `. .. note:: This recipe work with relation with ``hostapd``. Do not use them separately. wpa_supplicant Instruction in this recipe connect device to wireless network. In order to connect device on system boot, this recipe require configuration file. More about how to connect to wireless network you can find in :doc:`step by step guide (extended) about connecting to wireless network `. Extended recipes ^^^^^^^^^^^^^^^^ Extended recipes are addition to base system functionalities. They widen possibilities of any custom image. For this packages there is separate version of system image.