91 Commits

Author SHA1 Message Date
Thilo Graf
1fd7cb62fc init.sh: fix unintended git string for workdir 2025-07-08 22:09:34 +02:00
Thilo Graf
061053c7b5 update readme 2025-07-08 22:07:38 +02:00
Thilo Graf
d84f277098 Version updated from 0.1.0 to 0.1.0 - Files updated. 2025-03-29 21:08:45 +00:00
Thilo Graf
2d26cc0775 readme: Automatically translated README 2025-03-29 21:08:44 +00:00
Thilo Graf
116cc557dc readme: Automatically translated README 2025-03-29 22:07:33 +01:00
Thilo Graf
1ff67985ec github workflow: rework 2025-03-29 21:23:35 +01:00
Thilo Graf
889b4b9746 init.sh: switch clone url of meta-openembedded to faster github mirror 2025-03-29 21:03:57 +01:00
Thilo Graf
0ecffb58dd init.sh: fix syntax error
line 184: [: ==: unary operator expected
2025-03-29 21:00:24 +01:00
Thilo Graf
1528ca7279 init.sh: switch clone url of yoctoproject to faster github mirror 2025-03-29 20:42:43 +01:00
Thilo Graf
6bc2f1b7f9 workflow: use Python 3.8 to ensure compatibility with googletrans 3.1.0a0 2025-02-14 22:39:56 +01:00
Thilo Graf
48ec25e2e4 init.sh: fix wrong information for update 2025-02-14 22:21:58 +01:00
Thilo Graf
6d4ae33a0e Refactor patch application in fetch_meta: add apply_patch function
- Introduced a new function `apply_patch` to encapsulate patch application logic.
- The function first checks (using a reverse check) if the patch is
  already applied.
- If not, it uses `git apply --check` and `git apply` to apply the patch,
  then commits the change.
- Updated `fetch_meta` to call `apply_patch` for all patches instead of
  using `git am`.
- This refactoring simplifies the patching process and ensures that
  partially applied or faulty patches do not leave the repository
  in an inconsistent state.
2025-02-14 22:07:17 +01:00
Thilo Graf
7961947fa9 fix(fetch_meta): skip checkout when branch_hash is empty
Added a condition to only execute the git checkout command if a valid
branch_hash is provided.
This prevents the "empty string is not a valid pathspec" error when
branch_hash is empty.
2025-02-13 20:29:28 +01:00
Thilo Graf
0c17141c15 init.sh: add miising bracket 2025-02-13 20:05:22 +01:00
Thilo Graf
1488d7f07a readme_en.md: fix wrong license name
Autotranslation error.
2025-01-21 10:59:02 +01:00
Thilo Graf
0acb4f2bcb workflow: remove unneeded push 2025-01-21 10:49:09 +01:00
Thilo Graf
2f12b0e953 workflow: update paths to include files directory and additional config files 2025-01-21 10:20:38 +01:00
Thilo Graf
b220b0804f Readme: fix som copy paste errors 2025-01-21 10:18:39 +01:00
Thilo Graf
3c9c730ef5 .gitignore: add translate stuff 2025-01-19 20:02:28 +01:00
Thilo Graf
b85a65968f update README 2025-01-19 20:00:44 +01:00
Thilo Graf
495bd574c1 .github/workflow: update yaml
use only .github/workflows/translateandtag.yml as workflow
2025-01-19 19:59:44 +01:00
Thilo Graf
fd2fec8550 .gitignore: add tagit- and python environment stuff 2025-01-19 18:27:38 +01:00
Thilo Graf
3e510b0f91 init.sh: Dynamically determine 'poky' basename from YOCTO_GIT_URL
- Replaced hardcoded 'poky' with `$(basename $YOCTO_GIT_URL)` for better
  maintainability.
- Ensured compatibility with dynamically fetched URLs for Yocto and
  potential future sources.
2025-01-19 17:56:27 +01:00
Thilo Graf
e915e9a3af Update README-de.md 2024-12-04 19:44:19 +01:00
Thilo Graf
e207b2f214 readme: update readme 2024-05-13 17:59:46 +02:00
Thilo Graf
bd4394002a init.sh: Refactor image version handling in the build script
- Introduced DEFAULT_IMAGE_VERSION and COMPATIBLE_IMAGE_VERSIONS for
  flexible version management.
- Mapped multiple compatible versions to a single configuration block
  to avoid duplication.
- Ensured IMAGE_VERSION adjusts dynamically based on user input,
  with validation against COMPATIBLE_IMAGE_VERSIONS.
- Streamlined environment variable naming and organized source
  layer configuration.
- Added conditional execution for Python2 layer fetching based on the
  presence of PYTHON2_SRCREV.

This commit improves the script's maintainability and robustness by clarifying version management and optimizing configuration handling.
2024-05-12 20:06:23 +02:00
Thilo Graf
dc119f2cab local.conf.common.sample: allign to changed neutrino recipe name and API-keys 2024-05-11 20:24:07 +02:00
Thilo Graf
f058f2dc4f readme: update readme 2024-05-11 20:22:26 +02:00
Thilo Graf
f610523694 init: Remove DIST_URL
Resolve ambiguity of DIST_URL with explicit assignment to UPDATE_SERVER_URL
2024-05-03 22:06:09 +02:00
Thilo Graf
a8123d868a update Readme 2024-05-03 20:59:33 +02:00
Thilo Graf
1c8c28d6fe init.sh: Refactor script configuration and directory paths
- Update DIST_BASEDIR assignment to use $DIST_DIR for improved
  clarity and consistency in directory management.
- Rename HTTPD_DIST_HOSTNAME and HTTPD_DIST_DIR to
  UPDATE_SERVER_URL and DIST_DIR respectively, across the script to
  better reflect their purpose and usage.
- Introduce LOCAL_CONFIG_FILE_INC_PATH variable initialization in
  the global scope for enhanced script modularity and maintainability.
- Adjust getopt configuration to align with the renamed and newly
  introduced variables.
2024-03-25 21:30:04 +01:00
Thilo Graf
e5e068c9c6 init.sh: fix typo 2024-03-25 20:13:45 +01:00
Thilo Graf
5a6564cfa1 init_funtions.sh: remove invalid option from unlink 2024-03-25 19:47:46 +01:00
Thilo Graf
17c788f0b6 init.sh: update instructions 2024-03-25 19:43:26 +01:00
Thilo Graf
2528ed229f update Readme 2024-03-13 17:51:44 +01:00
Thilo Graf
b4102b8629 init.sh: add reset feature 2024-03-04 10:54:20 +01:00
Thilo Graf
f81a5a4f4c refactor script 2024-03-03 20:05:09 +01:00
Thilo Graf
1ab259dc19 init: disable osmio machines
not really supported, local test not possible
2024-02-06 10:20:25 +01:00
Thilo Graf
36fa4881ac config.sample: rework some version features 2024-02-06 10:20:25 +01:00
Thilo Graf
035d55be1e init: adopt init of local configs for hd6x machines 2024-02-06 10:20:25 +01:00
GitHub Actions
a02717be46 readme: Automatically translated README to English 2023-09-18 08:07:27 +00:00
Thilo Graf
fd6946add0 readme: simplify init command 2023-09-18 10:05:13 +02:00
Thilo Graf
8db6d9ff5a .github: add fix for anchor after translation 2023-09-18 09:54:59 +02:00
Thilo Graf
1c2ea27e48 readme: update init command 2023-09-18 09:19:16 +02:00
GitHub Actions
7364c023f3 readme: Automatically translated README to English 2023-09-17 11:49:39 +00:00
Thilo Graf
be593b9280 readme: add hint for libcapstone package version 2023-09-17 13:43:49 +02:00
GitHub Actions
cdc0a66024 readme: Automatically translated README to English 2023-09-16 19:58:40 +00:00
Thilo Graf
1fab14c1b1 readme: fix anchor and add new clone url 2023-09-16 21:58:12 +02:00
Thilo Graf
7cc95f244c .github: add translate workflow 2023-09-16 21:57:56 +02:00
Thilo Graf
c99b2c81a5 local.conf.common.inc.sample: add --without-debug into sample config
This allows to control debug mode for neutrino build.
2023-05-16 11:37:30 +02:00
Thilo Graf
7192612c65 init: remove backticks for better readability 2023-05-01 15:45:01 +02:00
Thilo Graf
118bf41374 local.conf.common.inc.sample: Use defauls for numbers of threads and make
Build system already calculates the optimized values.
2023-05-01 14:45:40 +02:00
Thilo Graf
f6013c24f8 local.conf.common.inc.sample: add some notes for git configuration
More detailed description
2023-05-01 14:43:52 +02:00
Thilo Graf
af32875a90 Readme: supplement to Update README-de.md
README-en.md was not considered
btw. git clone https://github.com/dbt1/build.git is still valid.
It was only renamed because there was a risk of confusion since the
directory build/<machine> was named very similarly.
2023-05-01 14:30:49 +02:00
Yoshi1981
a57049b8ff Update README-de.md
Signed-off-by: Thilo Graf <dbt@novatux.de>

README-en.md is not considered
2023-04-12 18:15:24 +02:00
Thilo Graf
eb6fa9c3af local.conf.common.sample: add newer defaults, remove expired variables 2023-03-31 21:14:41 +02:00
Thilo Graf
aa1967149f Update README-en.md 2023-02-21 20:18:26 +01:00
Thilo Graf
7d64ca76ea Update README-de.md 2023-02-21 20:17:54 +01:00
Thilo Graf
33e5895b69 init-functions: add e4hdultra 2022-11-19 12:23:10 +01:00
Thilo Graf
3ece5019d6 switch to 3.2.4 2022-11-13 15:01:49 +01:00
Thilo Graf
6f9a3e5d5f init: add meta-ceryon 2022-11-12 19:21:26 +01:00
Thilo Graf
b67b6179a0 ini_functions.sh: add migration for archiv/sstate sources 2022-11-12 16:48:59 +01:00
Thilo Graf
b2bc94cc85 config sample: add some alter fetch urls for glibc and binutils 2022-10-26 21:44:52 +02:00
Thilo Graf
083bad396c config sample: use differ sstate-cache sources 2022-10-26 21:25:29 +02:00
Thilo Graf
512fd26b8c init: more reworks, update server urls 2022-10-25 21:17:16 +02:00
Thilo Graf
06dc131957 init: remove comment line 2022-10-25 21:13:18 +02:00
Thilo Graf
417adaae42 init: more reworks 2022-09-08 19:58:14 +02:00
Thilo Graf
8853288746 init: init functions outsourced 2022-09-07 13:03:14 +02:00
Thilo Graf
d0b46d9d66 init: use own directory for config backups 2022-09-07 10:56:10 +02:00
Thilo Graf
b3bf207181 init: allow modifyiing bblayer.conf files
required for possible new layers and migration
2022-09-07 07:26:59 +02:00
Thilo Graf
60951020ac init: add TIMESTAMP variable 2022-09-06 13:50:57 +02:00
Thilo Graf
3274d534f4 init: rearrange clone output 2022-08-26 08:46:59 +02:00
Thilo Graf
91e99de80c Update README-en.md 2022-08-25 10:59:20 +02:00
Thilo Graf
84e8e7f4b3 Update README-de.md 2022-08-25 10:58:45 +02:00
Thilo Graf
bba6f1757a rework script for more required layers and configurations 2022-08-23 11:08:19 +02:00
Thilo Graf
3357c695e8 update local.conf.common.inc 2022-06-16 21:19:53 +02:00
Thilo Graf
53c1eff2d9 update README.md
Revoved obsolete parameters and version 3.0, 3.1, only v3.2 supported
Only one parameter is reqiured now
2022-06-12 15:02:40 +02:00
Thilo Graf
635dcea62b local.conf.common.inc.sample: update some entries 2022-06-12 14:33:25 +02:00
Thilo Graf
e6adc400ae init: prepare for bre2ze4k 2022-06-12 14:17:53 +02:00
Thilo Graf
5a69bca0b3 Update init.sh 2022-03-15 20:04:38 +01:00
Thilo Graf
81e94378da Update README.md 2021-10-17 20:56:13 +02:00
Thilo Graf
6c12b84daa Update README.md 2021-10-15 05:17:48 +02:00
Thilo Graf
f0a324cf8c init.sh: add link to source doc directory 2021-10-13 17:24:02 +02:00
Thilo Graf
e843103372 init: update to latest gatesgarth revision 2021-09-06 14:26:14 +02:00
Thilo Graf
c3e5a8c69c update sample config
Prepared for new plugin recipes
2021-09-03 21:17:02 +02:00
Thilo Graf
0036b959aa Update README.md 2021-07-28 10:32:16 +02:00
Thilo Graf
21060d3016 Update README.md 2021-06-16 11:12:05 +02:00
Thilo Graf
93eac578c8 Update README.md 2021-06-14 14:00:49 +02:00
Thilo Graf
56a6509346 Update README.md 2021-06-11 10:07:36 +02:00
Thilo Graf
6c4dace716 Update README.md 2021-06-10 11:23:02 +02:00
Thilo Graf
5e06dceea8 Update README.md 2021-06-10 11:01:13 +02:00
12 changed files with 2129 additions and 930 deletions

84
.github/workflows/translateandtag.yml vendored Normal file
View File

@@ -0,0 +1,84 @@
name: Translate README
on:
push:
branches:
- master
paths:
- 'README.md'
- 'README_de.md'
- 'init.sh'
- 'init.functions.sh'
- 'files/**'
- 'local.conf.common.inc.sample'
permissions:
contents: write
jobs:
translate:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v3
with:
python-version: 3.8
- name: Install translate dependencies
run: |
python -m pip install --upgrade pip
pip install --upgrade googletrans==3.1.0a0
curl -o translate-md.py https://raw.githubusercontent.com/dbt1/translate-md/refs/heads/master/translate-md.py
chmod 755 translate-md.py
- name: Prepare Git user data
run: |
git config --global user.email "dbt@novatux.de"
git config --global user.name "Thilo Graf"
- name: Verify translate-md.py download
run: |
if [ ! -f translate-md.py ]; then
echo "translate-md.py was not downloaded!"
exit 1
fi
- name: Translate README
run: |
cp README_de.md template.md
python translate-md.py --template-md template.md --output-dir . --prefix README_ --main-doc README.md -c translate-md-config.json -s de
rm template.md
- name: Commit and push translated README
run: |
git add README_de.md -f README_en.md
git commit -m "readme: Automatically translated README"
- name: Install tagit dependencies
run: |
pip install GitPython
curl -o tagit.py https://raw.githubusercontent.com/dbt1/tagit/master/tagit.py
curl -o tagit-config.json https://raw.githubusercontent.com/dbt1/tagit/master/tagit-config.json
chmod +x tagit.py
- name: Verify tagit.py download
run: |
if [ ! -f tagit.py ]; then
echo "tagit.py was not downloaded!"
exit 1
fi
- name: Tagging
run: |
python tagit.py -f README_de.md -f README_en.md --scheme-file tagit-config.json
- name: Commit and push version and tag changes
run: |
git add -A
git commit -m "Automatically updated tags [skip ci]" || echo "No changes to commit"
git push
git push --tags

9
.gitignore vendored
View File

@@ -9,8 +9,17 @@ build-neutrino
local.conf.common.inc local.conf.common.inc
dist/* dist/*
build* build*
backups*
*.orig *.orig
*.log *.log
local build increment local build increment
*.list *.list
*/poky
poky-*
venv
tagit.py
tagit-config.json
translate-md.py

162
README.md
View File

@@ -1,159 +1,9 @@
# Quick start image build # # Documentation
## Preparation This document is available in the following languages:
NOTE: If you are using the Tuxbox-Builder VM (this is not mandatory) please jump to [step 1](#1-clone-init-script-into-a-directory-of-your-choice). The Tuxbox-Builder VM already contains required packages.
For details and download of Tuxbox-Builder VM see: [Tuxbox-Builder](https://sourceforge.net/projects/n4k/files/Tuxbox-Builder)
### Install required packages (Debian 9/10) <!-- LANGUAGE_LINKS_START -->
```bash [🇩🇪 German](README_de.md) | [🇬🇧 English](README_en.md)
apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential \ <!-- LANGUAGE_LINKS_END -->
chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 libegl1-mesa pylint3 xterm subversion locales-all \
libxml2-utils ninja-build default-jre clisp libcapstone3 libsdl2-dev
```
NOTE: Older buildsystem versions < 3.2 need libsdl1.2-dev
### Recommended additional packages for graphical support (e.g. KDE ...): Please choose your preferred language by clicking on the links above.
```bash
apt-get install -y gitk git-gui meld
```
### Optional: In case of no configured git, please set your global git user data:
```bash
git config --global user.email "you@example.com"
git config --global user.user "Your Name"
```
For usage with other distributions see: [Yocto Project Quick Build](https://www.yoctoproject.org/docs/latest/brief-yoctoprojectqs/brief-yoctoprojectqs.html)
### let's start:
## 1. Clone init script into a directory of your choice
```bash
$:~ git clone https://github.com/tuxbox-neutrino/build.git
$:~ cd build
```
## 2. Execute init script
This will clone all required layers and create some config files into your build directories.
* Parameter 1 <machine>: could be h7, hd51, hd60, hd61, osmio4k, osmio4kplus or set 'all' or keep empty ' ' for all machines.
* Parameter 2 <image-version>: could be 3.0, 3.1, 3.2 or keep empty for latest version (recommended, older versions are not really maintained anymore)
```bash
$:~ ./init.sh <machine> <image-version>
$:~ cd poky-<image-version>
```
example:
```bash
$:~ ./init.sh hd51 3.2
$:~ cd poky-3.2
```
## 3. Execute environment script
Please use possible machine type which you selected (see [step 2](#2-execute-init-script))! Here as example we use hd51.
This creates (if not exists!) the build directory named as hd51, sets the build environment and will print some lines:
```bash
$:~ . ./oe-init-build-env hd51
### Shell environment set up for builds. ###
You can now run 'bitbake <target>'
Common targets are:
core-image-minimal
core-image-sato
meta-toolchain
meta-ide-support
You can also run generated qemu images with a command like 'runqemu qemux86'
Other commonly useful commands are:
- 'devtool' and 'recipetool' handle common recipe tasks
- 'bitbake-layers' handles common layer tasks
- 'oe-pkgdata-util' handles common target package tasks
tuxbox@tuxbox-builder:~/Build/poky-3.0/hd51
$
```
**NOTE:** If you left the current shell you must retry [step 3](#3-execute-environment-script) for your machine type to recreate the required environment.
## 4. Build image
Now you are ready to build an image.
```bash
$:~ /build/poky-3.2/<machine>$ bitbake neutrino-image
```
This may take a while. Some warn messages can be ignored. Error messages during setscene tasks are no problem but errors during build and package tasks will abort the process. In this case please report or send us your solution to [Tuxbox-Forum](https://forum.tuxbox-neutrino.org/forum/viewforum.php?f=77). Help is very welcome.
If all done, such a message should appear:
```bash
...
NOTE: Tasks Summary: Attempted 4568 tasks of which 4198 didn't need to be rerun and all succeeded.
...
```
## That's it ...
Built images and packages to find under:
```
~/build/poky-X.X/<machine>/tmp/deploy
```
or in the dist directory:
```
~/build/dist/<image-version/<machine>/
```
## Updating
### Update target sources
An explicit update for any sources (e.g. neutrino) is not required. This will be done automatically on evrery called target with bitbake. This will also update required dependencies. See also "[Working on target sources](#working-on-target-sources)"!
### Update meta layer repositories
Execution of init script will update the yocto poky-x.x repository to the required yocto release and will updating the included local meta layers to current
state of remote repositories. Of corse you can update and modiify your local meta-layer for meta-neutrino and machine layers repositories manually. The update routines will stash uncommitted changes or will rebase your local commits to new remote changes, but conflicts are possible. In this case you must solve manually.
**Note: Your config files will be untouched. New or adapted config options are not considered. Please check your configuration if required.**
## Working on target sources
In this case you should transfer the desiered target source into the workspace repository.
if You have moved any target source into the workspace tree you have full control to source code you want to modify. See also [devtool](https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#using-devtool-in-your-sdk-workflow) and especially [devtool modify](https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#sdk-devtool-use-devtool-modify-to-modify-the-source-of-an-existing-component).
## Reset configuration if required
If you want to reset your configs, please rename (delete is not recommended) the conf directory ($HOME/build/poky-X.X/<machine>/conf) and execute the init script again.
## Customize if required
It's recommended to build for first time without any changes on config files to get an impression how the build process is working and see the results.
The possibilities for adjustments are very extensive and not really manageable for beginners. However, the Yoctoproject is very
extensively documented and provides the best source of information.
**Please do not modify the Yocto-sources! This is not recommended by the Yocto-Team, but you can use [.bbappend](https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#using-bbappend-files) files to complete, expand or override meta core Yocto recipes.**
The generated local.conf contains only a few lines but contains a line which is linking a common config file and is valid for all images and supported machine types. The origin cloned sample config file ("local.conf.common.inc.sample") should be untouched. This avoids possible conflicts during updating the init script from git repo. After executed init script (step 2), the config sample file was renamed from "local.conf.common.inc.sample" to "local.conf.common.inc" and this file you can feed with your own options which have effect for all images you want to build.
Alternatively you can modify the default "$HOME/Build/poky-X.X/<machine>/conf/local.conf" with your own requirements or include your own config file. After updated init script, some new or changed options could be added or removed. This case you should consider for your own configuration.
For local configuration these config files within your build directory are required:
```
../build/poky-X.X/<machine>/conf/bblayers.conf
../build/poky-X.X/<machine>/conf/local.conf
```
This is the minimal required setup for bblayers.conf.
NOTE! machine name is not a part of layer name (e.g. hd51)
```bitbake
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
${HOME}/build/poky-X.X/meta \
${HOME}/build/poky-X.X/meta-poky \
${HOME}/build/poky-X.X/meta-yocto-bsp \
${HOME}/build/poky-X.X/meta-neutrino \
${HOME}/build/poky-X.X/poky/meta-<metaname> \
"
```
Further informations about yocto buildsystem you can find here:
* https://www.yoctoproject.org/docs/latest/brief-yoctoprojectqs/brief-yoctoprojectqs.html
* https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html

367
README_de.md Normal file
View File

@@ -0,0 +1,367 @@
<!-- LANGUAGE_LINKS_START -->
<span style="color: grey;">🇩🇪 German</span> | [🇬🇧 English](README_en.md)
<!-- LANGUAGE_LINKS_END -->
Dieses Skript dient als Werkzeug zur Vereinfachung der Erstellung einer Umgebung für Entwicklung und des Build-Prozesses für Images die mit Neutrino als Benutzeroberfläche auf unterschiedlichen Hardware-Plattformen laufen. Es automatisiert einige Schritte, die für die Einrichtung einer konsistenten und funktionalen Entwicklungs- und Build-Umgebung erforderlich sind, indem es die notwendigen Abhängigkeiten und grundlegende Konfigurationen sowie Meta-Layer voreinrichtet und benutzerdefinierte Einstellungen ermöglicht. Das Skript zielt darauf ab, eine Grundlage zu bieten, auf der man aufbauen und experimentieren kann, um eigene angepasste Versionen von Tuxbox-Neutrino Images zu erstellen, zu aktualisieren und zu pflegen.
- [1. Vorbereitung](#1-vorbereitung)
- [1.1 Erforderliche Host-Pakete installieren](#11-erforderliche-host-pakete-installieren)
- [1.1.1 Empfohlene Zusatzpakete zur grafischen Unterstützung und Analyse](#111-empfohlene-zusatzpakete-zur-grafischen-unterstützung-und-analyse)
- [1.2 Git vorbereiten (falls erforderlich)](#12-git-vorbereiten-falls-erforderlich)
- [1.3 Init-Skript klonen](#13-init-skript-klonen)
- [1.4 Init-Skript ausführen](#14-init-skript-ausführen)
- [1.5 Struktur der Buildumgebung](#15-struktur-der-buildumgebung)
- [2. Image bauen](#2-image-bauen)
- [2.1 Box wählen](#21-box-wählen)
- [2.2 Starte Umgebungsskript](#22-starte-umgebungsskript)
- [2.3 Image erstellen](#23-image-erstellen)
- [3. Aktualisierung](#3-aktualisierung)
- [3.1 Image aktualisieren](#31-image-aktualisieren)
- [3.2 Paket aktualisieren](#32-paket-aktualisieren)
- [3.3 Meta-Layer-Repositorys aktualisieren](#33-meta-layer-repositorys-aktualisieren)
- [4. Eigene Anpassungen](#4-eigene-anpassungen)
- [4.1 Konfiguration](#41-konfiguration)
- [4.1.1 Konfigurationsdateien](#411-konfigurationsdateien)
- [4.1.2 bblayers.conf](#412-bblayersconf)
- [4.1.3 Konfiguration zurücksetzen](#413-konfiguration-zurücksetzen)
- [4.3 Recipes](#43-recipes)
- [4.4 Pakete](#44-pakete)
- [4.4.1 Quellcode im Workspace bearbeiten (Beispiel)](#441-quellcode-im-workspace-bearbeiten-beispiel)
- [5. Neubau eines einzelnen Pakets erzwingen](#5-neubau-eines-einzelnen-pakets-erzwingen)
- [6. Vollständigen Imagebau erzwingen](#6-vollständigen-imagebau-erzwingen)
- [7. Lizenz](#7-lizenz)
- [8. Weiterführende Informationen](#8-weiterführende-informationen)
## 1. Vorbereitung
Empfohlen sei an dieser Stelle, den dafür vorgesehenen Docker-Container zu verwenden, da damit schon wesentliche Schritte erledigt sind, um mit möglichst wenig Anpassungen an seinem System, loslegen zu können. [siehe docker-buildenv](https://github.com/tuxbox-neutrino/docker-buildenv). In diesem Fall kann man gleich [mit der Initialisierung](#14-init-skript-ausführen) beginnen.
**HINWEIS:** [docker-buildenv](https://github.com/tuxbox-neutrino/docker-buildenv) löst die [Tuxbox-Builder](https://sourceforge.net/projects/n4k/files/Tuxbox-Builder)-VM komplett ab. Deren Wartung wird nicht mehr weitergeführt.
Hier angegebene Pfade basieren auf Vorgaben, die vom Init-Script erzeugt werden. Einige Einträge werden als ```<Platzhalter>``` dargestellt, die lokal angepasst werden müssen. [Siehe Schema](#14-init-skript-ausführen)
### 1.1 Erforderliche Host-Pakete installieren
**Hinweis:** Bei Verwendung anderer Distributionen siehe: [Yocto Project Quick Build](https://docs.yoctoproject.org/3.2.4/ref-manual/ref-system-requirements.html#supported-linux-distributions)
Debian 11
```bash
sudo apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential \
chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 libegl1-mesa pylint3 xterm subversion locales-all \
libxml2-utils ninja-build default-jre clisp libcapstone4 libsdl2-dev doxygen
```
Debian 12
```bash
sudo apt-get install -y gawk wget git diffstat unzip texinfo gcc-multilib build-essential \
chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping \
python3-git python3-jinja2 libegl1-mesa pylint3 xterm subversion locales-all libxml2-utils \
ninja-build default-jre clisp libcapstone4 libsdl2-dev doxygen
```
#### 1.1.1 Empfohlene Zusatzpakete zur grafischen Unterstützung und Analyse
```bash
sudo apt-get install -y gitk git-gui meld cppcheck clazy kdevelop
```
### 1.2 Git vorbereiten (falls erforderlich)
Das init-Script verwendet Git zum Klonen der Meta-Layer Repositorys. Wenn noch kein konfiguriertes Git vorhanden ist, lege bitte Deine globalen Git-Benutzerdaten an, andernfalls wird während das Script durchläuft, unnötig darauf hingewiesen.
```bash
git config --global user.email "you@example.com"
git config --global user.name "Dein Name"
```
### 1.3 Init-Skript klonen
```bash
git clone https://github.com/tuxbox-neutrino/buildenv.git && cd buildenv
```
### 1.4 Init-Skript ausführen
```bash
./init && cd poky-3.2.4
```
### 1.5 Struktur der Buildumgebung
Nach [Schritt 1.4](#14-init-skript-ausführen) sollte etwa diese Struktur angelegt worden sein:
```
.buildenv
├── dist <-- Freigabeordner für http-Server (falls eingerichtet) http://localhost, http://localhost:8080 , benötigt für IPK-Feeds und Images
│ └── {DISTRO_VERSION} <-- hier liegen die erzeugten Images und Pakete (Symlinks zeigen auf die Deploy-Verzeichnisse innerhalb der Build-Unterverzeichnisse)
:
├── init.sh <-- init-Script
├── local.conf.common.inc <-- globale Benutzerkonfiguration, ist in die benutzerdefinierte Konfiguration inkluiert
:
├── log <-- Ordner für Logs, enthält Logs für jede Ausführung des Init-Scripts
:
└── poky-{DISTRO_VERSION} <-- Nach Schritt 1.4 befindest Du dich hier. Hier befindet sich der Buildsystem-Kern und die Meta-Layer
:
└── build <-- Hier liegen die Build-Unterverzeichnisse, nach Schritt 2.2 befindest Du dich in einem dieser Build-Unterverzeichnisse
├── <machine x> <-- Build-Unterverzeichnis für Maschinentyp x
│ ├── conf <-- Ordner für Layer und benutzerdefinierte Konfiguration
│ │ └── bblayers.conf <-- Konfigurationsdatei für eingebundene Meta-Layer
│ │ └── local.conf <-- benutzerdefinierte Konfiguration für einen Maschinentyp
│ :
│ ├── (tmp) <-- Arbeitsverzeichnis, wird beim Bauen automatisch angelegt
│ └── (workspace) <-- Workspace, wird beim Ausführen von devtool angelegt
:
└── <machine y> <-- weiteres Build-Unterverzeichnis für Maschinentyp y
```
## 2. Image bauen
Stelle sicher, dass Du dich wie im [Schema](#15-struktur-der-buildumgebung) gezeigt hier befindest:
```
poky-{DISTRO_VERSION}
```
### 2.1 Box wählen
Liste verfügbarer Geräte anzeigen lassen:
```bash
ls build
```
### 2.2 Starte Umgebungsskript
Führe das Umgebungsskript für die aus der Liste gewünschte Box einmalig aus! Du gelangst dann automatisch in das passende Build-Unterverzeichnis.
```bash
. ./oe-init-build-env build/<machine>
```
Solange man sich ab jetzt mit der erzeugten Umgebung innerhalb der geöffneten Shell im gewünschten Build-Unterverzeichnis befindet, muss man dieses Script nicht noch einmal ausführen und kannst [Schritt 2.3 ](#23-image-erstellen) Images oder beliebige Pakete bauen.
**Hinweis:** Du kannst auch weitere Shells und damit Buildumgebungen für weitere Boxtypen parallel dazu anlegen und je nach Bedarf auf das entsprechende Terminal wechseln und auch parallel bauen lassen, sofern es dein System hergibt.
### 2.3 Image erstellen
```bash
bitbake neutrino-image
```
Das kann eine Weile dauern. Einige Warnmeldungen können ignoriert werden. Fehlermeldungen, welche die Setscene-Tasks betreffen, sind kein Problem, aber Fehler während der Build- und Package-Tasks brechen den Prozess in den meisten Fällen ab. [Bitte melde in diesem Fall den Fehler oder teile Deine Lösung](https://forum.tuxbox-neutrino.org/forum/viewforum.php?f=77). Hilfe ist sehr willkommen.
Wenn alles erledigt ist, sollte eine ähnliche Meldung wie diese erscheinen:
```bash
"NOTE: Tasks Summary: Attempted 4568 tasks of which 4198 didn't need to be rerun and all succeeded."
```
<span style="color: green;">Das war's ...</span>
Ergebnisse findest Du unter:
```bash
buildenv/poky-{DISTRO_VERSION}/build/<machine>/tmp/deploy
```
oder im Freigabe-Verzeichnis:
```bash
buildenv/dist/<Image-Version>/<machine>/
```
Falls ein Webserver eingerichtet ist, der auf das Freigabe-Verzeichnis zeigt:
```bash
http://localhost/{DISTRO_VERSION} oder mit Portnummer http://localhost:8080/{DISTRO_VERSION}
```
## 3. Aktualisierung
Manuelle Aktualisierungen der Pakete sind nicht erforderlich. Dies wird automatisch bei jedem aufgerufenen Target mit Bitbake durchgeführt. Das gilt auch für mögliche Abhängigkeiten. Wenn man die volle Kontrolle über bestimmte Paket-Quellen haben möchte, kann man sich diese für jedes Paket im dafür vorgesehenen Workspace ablegen, siehe [4.4 Pakete](#44-pakete).
Sollten keine Aktualisierungen notwendig sein, werden die Builds automatisch übersprungen.
### 3.1 Image aktualisieren
```bash
bitbake neutrino-image
```
### 3.2 Paket aktualisieren
```bash
bitbake <package>
```
### 3.3 Meta-Layer-Repositorys aktualisieren
Die Ausführung des Init-Skripts mit dem ```--update``` Parameter aktualisiert die enthaltenen Meta-Layer auf den Stand der Remote-Repositorys.
```bash
./init --update
```
Falls Du an den Meta-Layern Änderungen vorgenommen hast, sollten angestoßene Update-Routinen des Init-scripts nicht festgeschriebene Änderungen vorübergehend stashen bzw. auf das lokale Repository rebasen. Natürlich kann man seine lokalen Meta-Layer für Meta-Neutrino- und Maschinen-Layer-Repositorys manuell aktualisieren. Konflikte muss man jedoch immer manuell auflösen.
**Hinweis:** Konfigurationsdateien bleiben im Wesentlichen unberührt, aber mögliche Variablennamen werden migriert. Neue oder geänderte Einstellungen werden nicht geändert. Bitte überprüfe evtl. die Konfiguration.
## 4. Eigene Anpassungen
### 4.1 Konfiguration
Es wird empfohlen, zum ersten Mal ohne geänderte Konfigurationsdateien zu bauen, um einen Eindruck davon zu bekommen, wie der Build-Prozess funktioniert und um die Ergebnisse möglichst schnell zu sehen.
Die Einstellmöglichkeiten sind sehr umfangreich und für Einsteiger nicht wirklich überschaubar. OpenEmbedded insbesondere das Yocto-Project ist jedoch sehr
umfassend dokumentiert und bietet die beste Informationsquelle.
#### 4.1.1 Konfigurationsdateien
> ~/buildenv/poky-3.2.4/build/```<machine>```/conf/local.conf
Diese Datei befindet sich im Buildverzeichnis des jeweiligen Maschinentyps und ist die eigentliche benutzerdefinierte Konfigurationsdatei, welche ursprünglich vom Buildsystem dafür vorgesehen ist. Diese local.conf enthält in dieser Umgebung jedoch nur nur wenige Zeilen und inkludiert eine globale Konfiguration. Diese Datei ist **nur** für den von ihr unterstützten Maschinentyp gültig. Hier kann man deshalb ergänzende Einträge vornhemen, die entsprechend nur für den Maschinentyp vorgesehen sind. [Siehe auch Schema](#14-init-skript-ausführen)
> ~/buildenv/local.conf.common.inc
Diese Datei enthält Einstellungen, die für alle Maschinentypen zutreffen und wird bei erstmaligen ausführen des Init-Scripts aus der Vorlage ```~/buildenv/local.conf.common.inc.sample``` erzeugt.
Die vom Buildsystem vorgesehene ```./build/<machine>/conf/local.conf``` könnte man zwar so wie es ursprügliche vom Buildsystem vorgesehen ist als primäre Konfigurationsdatei für jeden Maschinentyp separat verwenden, aber das würde den Wartungsaufwand unnötig erhöhen. Deshalb ist ```~/buildenv/local.conf.common.inc``` nur in ```./build/<machine>/conf/local.conf``` inkludiert,
**Hinweis zu** ```~/buildenv/local.conf.common.inc.sample```**:** Dies ist nur eine Vorlage und sollte unberührt bleiben, um mögliche Konflikte beim Aktualisieren des Build-Script-Repositorys zu vermeiden und um zu sehen, was sich geändert haben könnte.
Nach einer Aktualisierung des Build-Script-Repositorys könnten neue oder geänderte Optionen hinzugefügt oder entfernt worden sein, die nicht in die inkludierte Konfigurationsdatei übernommen werden. Diesen Fall sollte man in der eigenen Konfiguration berücksichtigen und falls erforderlich prüfen und anpassen.
#### 4.1.2 bblayers.conf
> ~/buildenv/poky-3.2.4/build/```<machine>```/conf/bblayers.conf
Diese Datei wird normalerweise beim erstmaligen ausführen des Init-Skripts angepasst und braucht in der Regel nur angepasst zu werden, wenn man Layer hinzufügen, entfernen oder ersetzen möchte.
#### 4.1.3 Konfiguration zurücksetzen
Wenn Du deine Maschinen-Konfigurationen zurücksetzen möchtest, benenne bitte das conf-Verzeichnis um (Löschen wird nicht empfohlen) und führe das Init-Skript erneut aus.
```bash
~/mv ~/buildenv/poky-3.2.4/build/<machine>/conf ~/buildenv/poky-3.2.4/build/<machine>/conf.01
~/cd ~/buildenv
~/./init
```
### 4.3 Recipes
**Sofern man nicht direkt an der Entwicklung der Poky-Ebenen beiteiligt ist, ändere nichts an den offiziellen Poky-Ebenen (Meta-Layer)! Dies wird vom Yocto-Projekt ausdrücklich nicht empfohlen, da man Gefahr läuft, bei Aktualisierungen, seine gesamte Arbeit zu verlieren und Inkompatibilitäten oder Konflikte schafft, die nur schwer zu warten sein können. Die übliche Vorgehensweise, um vorhandene offizielle Rezepte zu vervollständigen, zu erweitern oder zu überschreiben, ist die [Verwendung von .bbappend](https://docs.yoctoproject.org/3.2.4/dev-manual/dev-manual-common-tasks.html#using-bbappend-files-in-your-layer)-Dateien.**
Alternativ, allerdings auch nicht wirklich empfehlenswert, könnte man Kopien von offiziellen Reciepes in seine eigenen Meta-Layer übernehmen und anpassen, da diese dann in der Regel vom Buildsystem bevorzugt werden. In solch einem Fall ist man allerdings selbst dafür verantwortlich, diese Recipes aktuell zu halten, was den Wartungsaufwand allerdings unnötig erhöhen kann.
Für Rezepte aus den eigenen Meta-Layern wie z.B. meta-neutrino oder den Maschinen-Layern, gilt das prinzipiell genauso. Wer aber [aktiv an den Recipes mitarbeiten](https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html#modifying-an-existing-recipe) möchte, kann dies gerne tun.
### 4.4 Pakete
Wenn man die volle Kontrolle über einen Paket-Quellcode haben möchte, um z.B. etwas zu fixen oder aktiv zu entwickeln, sollte der Quellcode an dem man arbeiten möchte in den Workspace verschoben werden. Siehe: [Beispiel für Neutrino](#441-quellcode-im-workspace-bearbeiten-beispiel)
Siehe [devtool](https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html) und insbesondere [devtool modify](https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html#modifying-an-existing-recipe). Im Workspace hat man die Garantie, dass der Quellcode nicht vom Buildsystem angefasst wird. Beachtet man das nicht, kann es z.B. vorkommen, dass geänderter Quellcode immer wieder gelöscht oder modifiziert wird. Eigene Anpassungen können daher verloren gehen oder inkompatibel werden. In der lokalen Standardkonfiguration ist [rm_work](https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-rm-work) aktiviert, was dafür sorgt, dass nach jedem abgeschlossenem Bau eines Pakets, das jeweilige Arbeitsverzeichnis aufgeräumt wird, so dass ausser einigen Logs nichts übrig bleiben wird.
#### 4.4.1 Quellcode im Workspace bearbeiten (Beispiel)
Hier wird beispielhaft Neutrino verwendet, aber diese Vorgehensweise trifft im Wesentlichen auf alle anderen Pakete zu.
```bash
~/buildenv/poky-3.2.4/build/hd61$ devtool modify neutrino
NOTE: Starting bitbake server...54cf81d24c147d888c"
...
workspace = "3.2.4:13143ea85a1ab7703825c0673128c05845b96cb5"
Initialising tasks: 100% |###################################################################################################################################################################################################| Time: 0:00:01
Sstate summary: Wanted 0 Found 0 Missed 0 Current 10 (0% match, 100% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 83 tasks of which 80 didn't need to be rerun and all succeeded.
INFO: Adding local source files to srctree...
INFO: Source tree extracted to /home/<user>/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino
INFO: Recipe neutrino-mp now set up to build from /home/<user>/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino
```
Unter ```/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino``` befindet sich jetzt der Quellcode für Neutrino. Dort kann man dann daran arbeiten. Das bedeutet, dass das Buildsystem nicht mehr von sich aus vom Remote Git-Repo die Neutrino-Quellen klont bzw. automatisch aktalisiert, sondern ab jetzt nur noch die lokalen Quellen innerhalb des Workspace nutzt, die man selbst verwalten muss. Dabei handelt es sich um ein von devtool angelegtes Git-Repo, in welches man an das Original-Remote-Repository einbinden kann, sofern dies nicht bereits der Fall ist.
Führt man jetzt das aus...
```bash
bitbake neutrino
```
...wird Neutrino ab sofort nur noch vom lokalen Repo im Workspace gebaut werden:
```bash
NOTE: Started PRServer with DBfile: /home/<user>/buildenv/poky-3.2.4/build/hd61/cache/prserv.sqlite3, IP: 127.0.0.1, PORT: 34211, PID: 56838
...
workspace = "3.2.4:13143ea85a1ab7703825c0673128c05845b96cb5"
Initialising tasks: 100% |###################################################################################################################################################################################################| Time: 0:00:01
Sstate summary: Wanted 122 Found 116 Missed 6 Current 818 (95% match, 99% complete)
NOTE: Executing Tasks
NOTE: neutrino-mp: compiling from external source tree /home/<user>/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino
NOTE: Tasks Summary: Attempted 2756 tasks of which 2741 didn't need to be rerun and all succeeded.
```
**Hinweis!** Im speziellen Fall von Neutrino, ist es ratsam nicht nur dessen Quellcode, sondern auch die zugehörige ```libstb-hal``` in den Workspace zu übertragen.
```bash
devtool modify libstb-hal
```
## 5. Neubau eines einzelnen Pakets erzwingen
In einigen Fällen kann es vorkommen, dass ein Target, warum auch immer, abbricht. Man sollte deshalb aber keinesfalls in Panik verfallen und deswegen den Arbeitsordner und den teueren sstate-cache löschen. Bereinigungen kann man für jedes Target einzeln vornehmen, ohne ein ansonsten funktionierendes System platt zu machen.
Insbesondere defekte Archiv-URLs können zum Abbruch führen. Diese Fehler werden aber immer angezeigt und man kann die URL überprüfen. Oft liegt es nur an den Servern und funktionieren nach wenigen Minuten sogar wieder.
Um sicherzustellen, ob das betreffende Recipe auch tatsächlich ein Problem hat, macht es Sinn das betreffende Target komplett zu bereinigen und neu zu bauen. Um dies zu erreichen, müssen alle zugehörigen Paket-, Build- und Cachedaten bereinigt werden.
```bash
bitbake -c cleansstate <target>
```
anschließend neu bauen:
```bash
bitbake <target>
```
## 6. Vollständigen Imagebau erzwingen
Das Init-Skript stellt dafür die Option `--reset` zur Verfügung.
```bash
./init --reset
# Follow instructions
```
Manuell erreichst Du das ebenfalls, indem man das tmp-Verzeichnis im jeweiligem Build-Unterverzeichnis manuell umbenennt. Löschen kann man es nachträglich, wenn man Speicherplatz freigeben will oder sich sicher ist, dass man das Verzeichnis nicht mehr braucht:
```bash
mv tmp tmp.01
```
Anschließend das Image neu bauen lassen:
```bash
bitbake neutrino-image
```
Wenn man den Cache **nicht** gelöscht hat, sollte das Image in relativ kurzer Zeit fertig gebaut sein. Gerade deshalb wird empfohlen, den Cache beizubehalten. Das Verzeichnis wo sich der Cache befindet, wird über die Variable ```${SSTATE_DIR}``` festgelegt und kann in der Konfiguration angepasst werden.
Dieses Verzeichnis ist ziemlich wertvoll und nur in seltenen Fällen ist es notwendig, dieses Verzeichnis zu löschen. Bitte beachte, dass der Buildvorgang nach dem Löschen des Cache sehr viel mehr Zeit in Anspruch nimmt.
## 7. Lizenz
```
MIT License
```
## 8. Weiterführende Informationen
Weitere Informationen zum Yocto Buildsystem:
* https://docs.yoctoproject.org

374
README_en.md Normal file
View File

@@ -0,0 +1,374 @@
<!-- LANGUAGE_LINKS_START -->
[🇩🇪 German](README_de.md) | <span style="color: grey;">🇬🇧 English</span>
<!-- LANGUAGE_LINKS_END -->
This script serves as a tool to simplify setting up a development environment and the build process for images that run with Neutrino as the user interface on various hardware platforms. It automates several steps required to establish a consistent and functional development and build environment by preconfiguring necessary dependencies, basic configurations, and meta-layers, while allowing for custom settings. The script aims to provide a foundation on which you can build and experiment to create, update, and maintain your own customized versions of Tuxbox-Neutrino images.
* [1. Preparation](#1-preparation)
* [1.1 Install Required Host Packages](#11-install-required-host-packages)
* [1.1.1 Recommended Additional Packages for Graphical Support and Analysis](#111-recommended-additional-packages-for-graphical-support-and-analysis)
* [1.2 Prepare Git (if necessary)](#12-prepare-git-if-necessary)
* [1.3 Clone Init Script](#13-clone-init-script)
* [1.4 Run Init Script](#14-run-init-script)
* [1.5 Build Environment Structure](#15-build-environment-structure)
* [2. Building an Image](#2-building-an-image)
* [2.1 Choose a Box](#21-choose-a-box)
* [2.2 Start the Environment Script](#22-start-the-environment-script)
* [2.3 Create the Image](#23-create-the-image)
* [3. Updates](#3-updates)
* [3.1 Update Image](#31-update-image)
* [3.2 Update Package](#32-update-package)
* [3.3 Update Meta-Layer Repositories](#33-update-meta-layer-repositories)
* [4. Customizations](#4-customizations)
* [4.1 Configuration](#41-configuration)
* [4.1.1 Configuration Files](#411-configuration-files)
* [4.1.2 bblayers.conf](#412-bblayersconf)
* [4.1.3 Resetting Configuration](#413-resetting-configuration)
* [4.3 Recipes](#43-recipes)
* [4.4 Packages](#44-packages)
* [4.4.1 Editing Source Code in the Workspace (Example)](#441-editing-source-code-in-the-workspace-example)
* [5. Forcing a Rebuild of a Single Package](#5-forcing-a-rebuild-of-a-single-package)
* [6. Forcing a Full Image Rebuild](#6-forcing-a-full-image-rebuild)
* [7. License](#7-license)
* [8. Further Information](#8-further-information)
## 1. Preparation
At this point, it is recommended to use the provided Docker container, as it already covers essential steps needed to get started with minimal changes to your system. [See docker-buildenv](https://github.com/tuxbox-neutrino/docker-buildenv). In this case, you can jump straight to [running the initialization](#14-run-init-script).
**NOTE:** [docker-buildenv](https://github.com/tuxbox-neutrino/docker-buildenv) fully replaces the [Tuxbox-Builder](https://sourceforge.net/projects/n4k/files/Tuxbox-Builder) VM, which is no longer maintained.
The paths shown here are based on those generated by the init script. Some entries appear as `<placeholder>` and need to be adjusted locally. [See schema](#14-run-init-script).
### 1.1 Install Required Host Packages
**Note:** If you are using other distributions, see: [Yocto Project Quick Build](https://docs.yoctoproject.org/3.2.4/ref-manual/ref-system-requirements.html#supported-linux-distributions)
**Debian 11**
```bash
sudo apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential \
chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 libegl1-mesa pylint3 xterm subversion locales-all \
libxml2-utils ninja-build default-jre clisp libcapstone4 libsdl2-dev doxygen
```
**Debian 12**
```bash
sudo apt-get install -y gawk wget git diffstat unzip texinfo gcc-multilib build-essential \
chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping \
python3-git python3-jinja2 libegl1-mesa pylint3 xterm subversion locales-all libxml2-utils \
ninja-build default-jre clisp libcapstone4 libsdl2-dev doxygen
```
#### 1.1.1 Recommended Additional Packages for Graphical Support and Analysis
```bash
sudo apt-get install -y gitk git-gui meld cppcheck clazy kdevelop
```
### 1.2 Prepare Git (if necessary)
The init script uses Git to clone the meta-layer repositories. If you dont have Git configured yet, please set up your global Git user data; otherwise, youll get unnecessary warnings while the script runs.
```bash
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
```
### 1.3 Clone Init Script
```bash
git clone https://github.com/tuxbox-neutrino/buildenv.git && cd buildenv
```
### 1.4 Run Init Script
```bash
./init && cd poky-3.2.4
```
### 1.5 Build Environment Structure
After [step 1.4](#14-run-init-script), you should see a structure similar to this:
```
.buildenv
├── dist <-- Shared folder for HTTP server (if set up) http://localhost, http://localhost:8080, needed for IPK feeds and images
│ └── {DISTRO_VERSION} <-- Contains generated images and packages (symlinks to the deploy dirs inside build subdirectories)
:
├── init.sh <-- init script
├── local.conf.common.inc <-- global user configuration, included in custom config
:
├── log <-- folder for logs, contains logs for each init script run
:
└── poky-{DISTRO_VERSION} <-- After step 1.4 youll be here. Contains the build system core and meta-layers
:
└── build <-- Build subdirectories; after step 2.2 youll be inside one of these
├── <machine x> <-- Build dir for machine type x
│ ├── conf <-- Folder for layers and custom config
│ │ └── bblayers.conf <-- Config for included meta-layers
│ │ └── local.conf <-- Custom config for one machine type
│ :
│ ├── (tmp) <-- Work dir, auto-created during build
│ └── (workspace) <-- Workspace, created when running devtool
:
└── <machine y> <-- Another build dir for machine type y
```
## 2. Building an Image
Make sure you are in the directory shown in the [schema](#15-build-environment-structure):
```
poky-{DISTRO_VERSION}
```
### 2.1 Choose a Box
List available devices:
```bash
ls build
```
### 2.2 Start the Environment Script
Run the environment script for the desired box from the list once! You will be placed into the corresponding build subdirectory.
```bash
. ./oe-init-build-env build/<machine>
```
From now on, as long as you remain in the generated environment within the open shell in the chosen build subdirectory, you dont need to re-run this script and can go straight to [step 2.3](#23-create-the-image) to build images or any packages.
**Note:** You can also open additional shells and thus create parallel build environments for other box types, switching to the appropriate terminal as needed and even building in parallel, provided your system can handle it.
### 2.3 Create the Image
```bash
bitbake neutrino-image
```
This can take a while. Some warnings can be ignored. Errors related to setscene tasks are usually harmless, but build and package task errors typically abort the process. [Please report the error or share your solution](https://forum.tuxbox-neutrino.org/forum/viewforum.php?f=77). Help is always welcome.
When done, you should see a message like this:
```bash
NOTE: Tasks Summary: Attempted 4568 tasks of which 4198 didn't need to be rerun and all succeeded.
```
<span style="color: green;">Thats it...</span>
Results can be found under:
```bash
buildenv/poky-{DISTRO_VERSION}/build/<machine>/tmp/deploy
```
or in the shared directory:
```bash
buildenv/dist/<Image-Version>/<machine>/
```
If you have a web server pointing to the shared directory:
```bash
http://localhost/{DISTRO_VERSION} or with port number http://localhost:8080/{DISTRO_VERSION}
```
## 3. Updates
Manual package updates are not required. These are handled automatically on every bitbake invocation, including dependencies. If you want full control over certain package sources, you can place them in the workspace for each package; see [4.4 Packages](#44-packages).
If no updates are needed, builds are skipped automatically.
### 3.1 Update Image
```bash
bitbake neutrino-image
```
### 3.2 Update Package
```bash
bitbake <package>
```
### 3.3 Update Meta-Layer Repositories
Running the init script with the `--update` parameter updates the included meta-layers to the state of their remote repositories.
```bash
./init --update
```
If you have made changes to the meta-layers, the init scripts update routines should temporarily stash or rebase unstashed changes on the local repositories. Of course, you can manually update your local meta-layers for meta-neutrino and machine-layer repos, but you must resolve any conflicts manually.
**Note:** Configuration files remain mostly untouched, but variable names may be migrated. New or changed settings are not auto-updated. Please review your configuration if necessary.
## 4. Customizations
### 4.1 Configuration
It is recommended to build for the first time without modified configuration files to get a feel for the build process and see results quickly. The configuration options are extensive and not easy for beginners to grasp. However, OpenEmbedded and the Yocto Project are thoroughly documented and provide the best information source.
#### 4.1.1 Configuration Files
> \~/buildenv/poky-3.2.4/build/`<machine>`/conf/local.conf
This file, located in the build directory for each machine type, is the actual user configuration file intended by the build system. In this environment, it contains only a few lines and includes a global configuration. This file is **only** valid for its specific machine type. You can add entries here that apply only to that machine type. [See schema](#14-run-init-script)
> \~/buildenv/local.conf.common.inc
This file holds settings that apply to all machine types and is generated from the template `~/buildenv/local.conf.common.inc.sample` on the first run of the init script.
Although you could use the build systems intended `./build/<machine>/conf/local.conf` as the primary config file for each machine separately, this would increase maintenance overhead. Hence, `~/buildenv/local.conf.common.inc` is only included in `./build/<machine>/conf/local.conf`.
**Note on** `~/buildenv/local.conf.common.inc.sample`**:** This is a template and should remain untouched to avoid conflicts when updating the build-script repository and to see what has changed.
After updating the build-script repository, new or changed options may have been added or removed and not merged into your included config file. You should consider these cases and review and adjust your configuration if necessary.
#### 4.1.2 bblayers.conf
> \~/buildenv/poky-3.2.4/build/`<machine>`/conf/bblayers.conf
This file is usually adjusted on the first run of the init script and typically only needs changes when you want to add, remove, or replace layers.
#### 4.1.3 Resetting Configuration
If you want to reset your machine configurations, rename (rather than delete) the conf directory and rerun the init script.
```bash
mv ~/buildenv/poky-3.2.4/build/<machine>/conf ~/buildenv/poky-3.2.4/build/<machine>/conf.backup
cd ~/buildenv
./init
```
### 4.3 Recipes
**Unless you are directly contributing to Poky layers, do not modify the official Poky layers (meta-layers)!** The Yocto Project strongly discourages this practice, as you risk losing your work during updates and creating hard-to-maintain conflicts.
The usual way to extend or override existing recipes is with `.bbappend` files. [Learn more](https://docs.yoctoproject.org/3.2.4/dev-manual/dev-manual-common-tasks.html#using-bbappend-files-in-your-layer).
Alternatively (though also not recommended), you could copy official recipes into your own meta-layers and modify them, in which case you are responsible for keeping them up to date, increasing maintenance overhead.
The same principle applies to your own meta-layers like meta-neutrino or machine layers. If you want to actively work on recipes, feel free to [contribute](https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html#modifying-an-existing-recipe).
### 4.4 Packages
If you want full control over a packages source code (e.g., to fix or actively develop something), move the source you want to work on into the workspace. See the Neutrino example below.
See [devtool](https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html) and especially [devtool modify](https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html#modifying-an-existing-recipe). In the workspace, youre guaranteed that the build system wont touch the source. If you ignore this, you might find your changes repeatedly cleaned or overridden, losing or rendering them incompatible. In the default local config, [rm\_work](https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-rm-work) is enabled, which cleans each packages work directory after build, leaving only logs.
#### 4.4.1 Editing Source Code in the Workspace (Example)
This example uses Neutrino, but the procedure applies to most packages.
```bash
~/buildenv/poky-3.2.4/build/hd61$ devtool modify neutrino
NOTE: Starting bitbake server...54cf81d24c147d888c"
...
workspace = "3.2.4:13143ea85a1ab7703825c0673128c05845b96cb5"
Initialising tasks: 100% |########################################################################################################| Time: 0:00:01
Sstate summary: Wanted 0 Found 0 Missed 0 Current 10 (0% match, 100% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 83 tasks of which 80 didn't need to be rerun and all succeeded.
INFO: Adding local source files to srctree...
INFO: Source tree extracted to /home/<user>/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino
INFO: Recipe neutrino-mp now set up to build from /home/<user>/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino
```
The Neutrino source code is now in `/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino`. You can work on it there. From now on, the build system will not clone Neutrino from the remote Git repo but will use only your local workspace sources, managed by you.
When you run:
```bash
bitbake neutrino
```
... Neutrino will build from the local workspace repo:
```bash
NOTE: Started PRServer with DBfile: /home/<user>/buildenv/poky-3.2.4/build/hd61/cache/prserv.sqlite3, IP: 127.0.0.1, PORT: 34211, PID: 56838
...
workspace = "3.2.4:13143ea85a1ab7703825c0673128c05845b96cb5"
Initialising tasks: 100% |########################################################################################################| Time: 0:00:01
Sstate summary: Wanted 122 Found 116 Missed 6 Current 818 (95% match, 99% complete)
NOTE: Executing Tasks
NOTE: neutrino-mp: compiling from external source tree /home/<user>/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino
NOTE: Tasks Summary: Attempted 2756 tasks of which 2741 didn't need to be rerun and all succeeded.
```
**Tip:** For Neutrino, its also recommended to transfer the associated `libstb-hal` to the workspace:
```bash
devtool modify libstb-hal
```
## 5. Forcing a Rebuild of a Single Package
Sometimes a target fails for unknown reasons. Avoid panicking and wiping your workspace or sstate cache. You can clean up a specific target without breaking everything else.
Broken archive URLs often cause failures. These errors are shown, and you can verify the URL. They often resolve after a few minutes.
To ensure a recipe actually has an issue, clean and rebuild the entire targets data:
```bash
bitbake -c cleansstate <target>
```
Then rebuild:
```bash
bitbake <target>
```
## 6. Forcing a Full Image Rebuild
The init script provides the `--reset` option:
```bash
./init --reset
# Follow instructions
```
Manually, rename the tmp directory in the respective build subdirectory. You can delete it later to free space if youre sure you dont need it:
```bash
mv tmp tmp.backup
```
Then rebuild the image:
```bash
bitbake neutrino-image
```
If you havent deleted the cache, the image should finish relatively quickly. Thats why retaining the cache is recommended. The cache directory is defined by `${SSTATE_DIR}` and can be customized in the configuration.
This directory is valuable, and deleting it is rarely needed. Note that builds take much longer after deleting the cache.
## 7. License
```
MIT License
```
## 8. Further Information
More information on the Yocto build system:
* [https://docs.yoctoproject.org](https://docs.yoctoproject.org)

View File

@@ -0,0 +1,24 @@
From 090a04acb63ed1d7fc829fa41de9c5ee86d249c1 Mon Sep 17 00:00:00 2001
From: Thilo Graf <dbt@novatux.de>
Date: Sun, 24 Jul 2022 14:53:27 +0200
Subject: [PATCH 1/2] openembedded: disable meta-python
---
meta-multimedia/conf/layer.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-multimedia/conf/layer.conf b/meta-multimedia/conf/layer.conf
index be0e2b362..eb10c6eaa 100644
--- a/meta-multimedia/conf/layer.conf
+++ b/meta-multimedia/conf/layer.conf
@@ -29,6 +29,6 @@ BBFILE_PRIORITY_multimedia-layer = "6"
# cause compatibility issues with other layers
LAYERVERSION_multimedia-layer = "1"
-LAYERDEPENDS_multimedia-layer = "core meta-python"
+#LAYERDEPENDS_multimedia-layer = "core meta-python"
LAYERSERIES_COMPAT_multimedia-layer = "gatesgarth"
--
2.35.1

View File

@@ -0,0 +1,27 @@
From eb53094f171a3833f19b20667bda236d78a44ca9 Mon Sep 17 00:00:00 2001
From: Thilo Graf <dbt@novatux.de>
Date: Sun, 24 Jul 2022 14:56:09 +0200
Subject: [PATCH 2/2] openembedded: disable openembedded-layer, meta-phyton
---
meta-networking/conf/layer.conf | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/meta-networking/conf/layer.conf b/meta-networking/conf/layer.conf
index bd0a44cae..dce550fe2 100644
--- a/meta-networking/conf/layer.conf
+++ b/meta-networking/conf/layer.conf
@@ -14,8 +14,8 @@ BBFILE_PRIORITY_networking-layer = "5"
LAYERVERSION_networking-layer = "1"
LAYERDEPENDS_networking-layer = "core"
-LAYERDEPENDS_networking-layer += "openembedded-layer"
-LAYERDEPENDS_networking-layer += "meta-python"
+#LAYERDEPENDS_networking-layer += "openembedded-layer"
+#LAYERDEPENDS_networking-layer += "meta-python"
LAYERSERIES_COMPAT_networking-layer = "gatesgarth"
--
2.35.1

1
init Symbolic link
View File

@@ -0,0 +1 @@
init.sh

463
init.functions.sh Normal file
View File

@@ -0,0 +1,463 @@
#!/bin/bash
## Function to replace the echo command
function my_echo() {
local no_term_output="$1"
# Clean up text
if [ "$no_term_output" == "true" ]; then
shift
fi
local cleaned_output
cleaned_output=$(echo -e "${@}" | sed -r "s/\x1B\[[0-9;]*[a-zA-Z]//g")
# Write to log
echo "[ $(date '+%Y-%m-%d %H:%M:%S') ] - ${cleaned_output}" >> "$LOGFILE"
# Show on terminal
if [[ "$no_term_output" != "true" && -t 1 ]]; then
echo -e "${@}"
fi
}
## Function to check if a machine is valid
# Returns 0 if valid, 1 if not.
function is_valid_machine() {
local machine_to_check="$1"
for m in $MACHINES; do
if [[ "$machine_to_check" == "$m" || "$MACHINE" == "all" ]]; then
return 0 # valid
fi
done
return 1 # not valid
}
function do_exec() {
local cmd="$1"
local exit_behavior="$2"
local show_output="$3"
local log_text
local cmd_exit_status
my_echo true "[EXEC] $cmd"
# Execute the command
if [[ "$show_output" == "show_output" ]]; then
eval $cmd 2>> "$TMP_LOGFILE"
else
eval $cmd > /dev/null 2>> "$TMP_LOGFILE"
fi
cmd_exit_status=${PIPESTATUS[0]} # Get exit status of the first command in the last pipe
if [[ -f "$TMP_LOGFILE" ]]; then
log_text=$(cat "$TMP_LOGFILE")
: > "$TMP_LOGFILE" # Clear TMP_LOGFILE after reading
fi
if [[ $cmd_exit_status -ne 0 ]]; then
if [[ "$exit_behavior" != "no_exit" ]]; then
if [[ -n "$log_text" ]]; then
my_echo -e "\033[31;1mERROR:\033[0m $log_text"
my_echo "ERROR: $log_text" >> "$LOGFILE"
fi
exit 1
else
if [[ -n "$log_text" ]]; then
my_echo -e "\033[37;1mNOTE:\033[0m $log_text"
my_echo "NOTE: $log_text" >> "$LOGFILE"
fi
fi
fi
}
function get_metaname() {
local TMP_NAME="$1"
if [ "$TMP_NAME" == "hd51" ] || [ "$TMP_NAME" == "bre2ze4k" ] || [ "$TMP_NAME" == "mutant51" ] || [ "$TMP_NAME" == "ax51" ]; then
META_NAME="gfutures"
elif [ "$TMP_NAME" == "h7" ] || [ "$TMP_NAME" == "zgemmah7" ]; then
META_NAME="airdigital"
elif [ "$TMP_NAME" == "hd60" ] || [ "$TMP_NAME" == "hd61" ] || [ "$TMP_NAME" == "ax60" ] || [ "$TMP_NAME" == "ax61" ]; then
META_NAME="hisilicon"
elif [ "$TMP_NAME" == "osmio4k" ] || [ "$TMP_NAME" == "osmio4kplus" ]; then
META_NAME="edision"
elif [ "$TMP_NAME" == "e4hdultra" ]; then
META_NAME="ceryon"
else
META_NAME="$TMP_NAME"
fi
echo "$META_NAME"
}
## Function to apply a patch using git apply with check and commit
# Parameters:
# $1: target_git_path (Path to the Git repository)
# $2: patch_file (Name of the patch file located in $FILES_DIR)
# $3: layer_name (Name of the layer, only for log output)
function apply_patch() {
local target_git_path="$1"
local patch_file="$2"
local layer_name="$3"
my_echo -e "Applying patch: $patch_file"
# Check if the patch has already been applied by testing it in reverse
if git -C "$target_git_path" apply --reverse --check "$FILES_DIR/$patch_file" > /dev/null 2>&1; then
my_echo -e "\033[33;1mPatch $patch_file already applied to $layer_name; skipping.\033[0m"
return 0
fi
# Check if the patch can be applied cleanly
if do_exec "git -C \"$target_git_path\" apply --check \"$FILES_DIR/$patch_file\""; then
if do_exec "git -C \"$target_git_path\" apply \"$FILES_DIR/$patch_file\""; then
# After successfully applying the patch: add changes and commit
do_exec "git -C \"$target_git_path\" add -A"
do_exec "git -C \"$target_git_path\" commit -m \"Apply patch $patch_file\""
else
my_echo -e "\033[31;1mFailed to apply patch $patch_file to $layer_name using git apply\033[0m"
return 1
fi
else
my_echo -e "\033[33;1mSkipping patch $patch_file: cannot be applied cleanly.\033[0m"
fi
return 0
}
## Clone or update required branch for a meta-layer
function fetch_meta() {
local layer_name="$1"
local branch_name="$2"
local layer_git_url="$3"
local branch_hash="$4"
local target_git_path="$5"
local patch_list="$6"
if [[ "$GIT_SSH_KEYFILE" != "" ]]; then
export GIT_SSH_COMMAND="$SSH -i \"$GIT_SSH_KEYFILE\""
fi
if [[ ! -d "$target_git_path/.git" ]]; then
my_echo -e "Clone branch $branch_name from $layer_git_url into $target_git_path"
if do_exec "git clone -b \"$branch_name\" \"$layer_git_url\" \"$target_git_path\""; then
# Only perform checkout if branch_hash is not empty
if [ -n "$branch_hash" ]; then
do_exec "git -C \"$target_git_path\" checkout \"$branch_hash\" -b \"$IMAGE_VERSION\""
fi
do_exec "git -C \"$target_git_path\" pull -r origin \"$branch_name\""
else
my_echo -e "\033[31;1mError cloning $layer_name from $layer_git_url\033[0m"
return 1
fi
## Patching
if [[ -n "$patch_list" ]]; then
for patch_file in $patch_list; do
if ! apply_patch "$target_git_path" "$patch_file" "$layer_name"; then
return 1
fi
done
fi
else
if [[ $DO_UPDATE == "$true" ]]; then
my_echo -e "Update $target_git_path on branch $branch_name"
if [[ $(git -C "$target_git_path" stash list) ]]; then
my_echo -e "Stashing changes in $target_git_path"
do_exec "git -C \"$target_git_path\" stash push --include-untracked"
local stash_applied=true
fi
do_exec "git -C \"$target_git_path\" checkout \"$branch_name\"" || do_exec "git -C \"$target_git_path\" checkout -b \"$branch_name\""
do_exec "git -C \"$target_git_path\" pull -r origin \"$branch_name\""
## Patching
if [[ -n "$patch_list" ]]; then
for patch_file in $patch_list; do
if ! apply_patch "$target_git_path" "$patch_file" "$layer_name"; then
return 1
fi
done
fi
if [[ "$stash_applied" == true ]]; then
if do_exec "git -C \"$target_git_path\" stash pop"; then
my_echo -e "Stash applied successfully."
else
my_echo -e "\033[33;1mNote: Stash could not be applied. Manual intervention required.\033[0m"
return 1
fi
fi
fi
fi
return 0
}
## Clone/update required branch from tuxbox bsp layers
# Returns 0 if machine is required, 1 if not.
function is_required_machine_layer() {
local machine_list="$1"
for m in $machine_list; do
if [[ "$m" == "$MACHINE" ]]; then
return 0 # required
fi
done
return 1 # not required
}
## Get matching machine type from machine build id
function get_real_machine_type() {
local MACHINE_TYPE="$1"
if [ "$MACHINE_TYPE" == "mutant51" ] || [ "$MACHINE_TYPE" == "ax51" ] || [ "$MACHINE_TYPE" == "hd51" ]; then
echo "hd51"
elif [ "$MACHINE_TYPE" == "hd60" ] || [ "$MACHINE_TYPE" == "ax60" ]; then
echo "hd60"
elif [ "$MACHINE_TYPE" == "hd61" ] || [ "$MACHINE_TYPE" == "ax61" ]; then
echo "hd61"
elif [ "$MACHINE_TYPE" == "zgemmah7" ] || [ "$MACHINE_TYPE" == "h7" ]; then
echo "h7"
else
echo "$MACHINE_TYPE"
fi
}
## Get matching machine build id from machine type
function get_real_machine_id() {
local MACHINEBUILD="$1"
if [ "$MACHINEBUILD" == "hd51" ]; then
echo "ax51"
elif [ "$MACHINEBUILD" == "hd60" ]; then
echo "ax60"
elif [ "$MACHINEBUILD" == "hd61" ]; then
echo "ax61"
elif [ "$MACHINEBUILD" == "h7" ]; then
echo "zgemmah7"
else
echo "$MACHINEBUILD"
fi
}
## Function to add an entry to a file if it doesn't already exist.
## Returns 0 if entry was added, 1 if it already existed.
function set_file_entry() {
local FILE_NAME="$1"
local FILE_SEARCH_ENTRY="$2"
local FILE_NEW_ENTRY="$3"
if [ ! -f "$FILE_NAME" ]; then
echo "$FILE_NEW_ENTRY" > "$FILE_NAME"
return 0
else
if grep -q -w "$FILE_SEARCH_ENTRY" "$FILE_NAME"; then
return 1 # entry exists
else
echo "$FILE_NEW_ENTRY" >> "$FILE_NAME"
return 0
fi
fi
}
## Function to create configuration for box types
function create_local_config() {
local machine="$1"
if [ "$machine" != "all" ]; then
MACHINE_BUILD_DIR="$BUILD_ROOT/$machine"
do_exec "mkdir -p \"$BUILD_ROOT\""
BACKUP_CONFIG_DIR="$BACKUP_PATH/$machine/conf"
do_exec "mkdir -p \"$BACKUP_CONFIG_DIR\""
LOCAL_CONFIG_FILE_PATH="$MACHINE_BUILD_DIR/conf/local.conf"
if [ -d "$BUILD_ROOT_DIR/$machine" ]; then
if [ ! -L "$BUILD_ROOT_DIR/$machine" ]; then
my_echo -e "\033[37;1m\tcreate compatible symlinks directory for $machine environment ...\033[0m"
do_exec "mv \"$BUILD_ROOT_DIR/$machine\" \"$BUILD_ROOT\""
do_exec "ln -s \"$MACHINE_BUILD_DIR\" \"$BUILD_ROOT_DIR/$machine\""
fi
fi
if [ ! -d "$MACHINE_BUILD_DIR/conf" ]; then
my_echo -e "\033[37;1m\tcreating build directory for $machine environment ...\033[0m"
do_exec "cd \"$BUILD_ROOT_DIR\""
do_exec ". ./oe-init-build-env \"$MACHINE_BUILD_DIR\""
if [ -f "$LOCAL_CONFIG_FILE_PATH" ] && [ ! -f "$LOCAL_CONFIG_FILE_PATH.origin" ]; then
do_exec "mv \"$LOCAL_CONFIG_FILE_PATH\" \"$LOCAL_CONFIG_FILE_PATH.origin\""
fi
do_exec "cd \"$BASEPATH\""
echo "[Desktop Entry]" > "$BUILD_ROOT/.directory"
echo "Icon=folder-green" >> "$BUILD_ROOT/.directory"
fi
if [ -f "$LOCAL_CONFIG_FILE_INC_PATH" ]; then
if [ -f "$LOCAL_CONFIG_FILE_PATH" ]; then
HASHSTAMP=$(MD5SUM "$LOCAL_CONFIG_FILE_PATH")
do_exec "cp \"$LOCAL_CONFIG_FILE_PATH\" \"$BACKUP_CONFIG_DIR/local.conf.$HASHSTAMP.$BACKUP_SUFFIX\""
my_echo "migrate settings within $LOCAL_CONFIG_FILE_INC_PATH..."
do_exec "sed -i -e 's|http://archiv.tuxbox-neutrino.org|https://n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_INC_PATH\""
do_exec "sed -i -e 's|https://archiv.tuxbox-neutrino.org|https://n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_INC_PATH\""
do_exec "sed -i -e 's|http://archiv.tuxbox-neutrino.org/sources|https://n4k.sourceforge.io/sources|g' \"$LOCAL_CONFIG_FILE_INC_PATH\""
do_exec "sed -i -e 's|https://archiv.tuxbox-neutrino.org/sources|https://n4k.sourceforge.io/sources|g' \"$LOCAL_CONFIG_FILE_INC_PATH\""
do_exec "sed -i -e 's|http://sstate.tuxbox-neutrino.org|https://n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_INC_PATH\""
do_exec "sed -i -e 's|https://sstate.tuxbox-neutrino.org|https://n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_INC_PATH\""
do_exec "sed -i -e 's|archiv.tuxbox-neutrino.org|n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_INC_PATH\""
do_exec "sed -i -e 's|sstate.tuxbox-neutrino.org|n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_INC_PATH\""
my_echo "migrate settings within $LOCAL_CONFIG_FILE_PATH"
do_exec "sed -i -e 's|http://archiv.tuxbox-neutrino.org|https://n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_PATH\""
do_exec "sed -i -e 's|https://archiv.tuxbox-neutrino.org|https://n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_PATH\""
do_exec "sed -i -e 's|http://archiv.tuxbox-neutrino.org/sources|https://n4k.sourceforge.io/sources|g' \"$LOCAL_CONFIG_FILE_PATH\""
do_exec "sed -i -e 's|https://archiv.tuxbox-neutrino.org/sources|https://n4k.sourceforge.io/sources|g' \"$LOCAL_CONFIG_FILE_PATH\""
do_exec "sed -i -e 's|http://sstate.tuxbox-neutrino.org|https://n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_PATH\""
do_exec "sed -i -e 's|https://sstate.tuxbox-neutrino.org|https://n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_PATH\""
do_exec "sed -i -e 's|archiv.tuxbox-neutrino.org|n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_PATH\""
do_exec "sed -i -e 's|sstate.tuxbox-neutrino.org|n4k.sourceforge.io|g' \"$LOCAL_CONFIG_FILE_PATH\""
search_line="#UPDATE_SERVER_URL = \"http:\/\/@hostname@\""
add_line="UPDATE_SERVER_URL = \"http://$HTTP_ADDRESS\""
if ! grep -qF -- "$add_line" "$LOCAL_CONFIG_FILE_INC_PATH"; then
sed -i -e "/$search_line/a $add_line" "$LOCAL_CONFIG_FILE_INC_PATH"
fi
fi
set_file_entry "$LOCAL_CONFIG_FILE_PATH" "generated" "# auto generated entries by init script"
set_file_entry "$LOCAL_CONFIG_FILE_PATH" "$BASEPATH/local.conf.common.inc" "include $BASEPATH/local.conf.common.inc"
M_TYPE='MACHINE = "'$(get_real_machine_type "$machine")'"'
if set_file_entry "$LOCAL_CONFIG_FILE_PATH" "MACHINE" "$M_TYPE"; then
my_echo -e "\t\033[37;1m$LOCAL_CONFIG_FILE_PATH has been upgraded with entry: $M_TYPE \033[0m"
fi
M_ID='MACHINEBUILD = "'$(get_real_machine_id "$machine")'"'
if set_file_entry "$LOCAL_CONFIG_FILE_PATH" "MACHINEBUILD" "$M_ID"; then
my_echo -e "\t\033[37;1m$LOCAL_CONFIG_FILE_PATH has been upgraded with entry: $M_ID \033[0m"
fi
else
my_echo -e "\033[31;1mERROR:\033[0m:\ttemplate $BASEPATH/local.conf.common.inc not found..."
exit 1
fi
BBLAYER_CONF_FILE="$MACHINE_BUILD_DIR/conf/bblayers.conf"
if [ -f "$BBLAYER_CONF_FILE" ]; then
HASHSTAMP=$(MD5SUM "$BBLAYER_CONF_FILE")
do_exec "cp \"$BBLAYER_CONF_FILE\" \"$BACKUP_CONFIG_DIR/bblayer.conf.$HASHSTAMP.$BACKUP_SUFFIX\""
fi
META_MACHINE_LAYER="meta-$(get_metaname "$machine")"
set_file_entry "$BBLAYER_CONF_FILE" "generated" "# auto generated entries by init script"
if [[ -z "$PYTHON2_SRCREV" ]]; then
PYTHON2_LAYER_NAME=""
fi
LAYER_LIST="$TUXBOX_LAYER_NAME $META_MACHINE_LAYER $OE_LAYER_NAME/meta-oe $OE_LAYER_NAME/meta-networking $PYTHON2_LAYER_NAME $QT5_LAYER_NAME"
for LL in $LAYER_LIST; do
if set_file_entry "$BBLAYER_CONF_FILE" "$LL" "BBLAYERS += \"${BUILD_ROOT_DIR}/${LL}\""; then
my_echo -e "\t\033[37;1m$BBLAYER_CONF_FILE has been upgraded with entry: $LL... \033[0m"
fi
done
fi
}
## Function to create local dist directory to prepare for web access
function create_dist_tree() {
DIST_BASEDIR="$DIST_DIR/$IMAGE_VERSION"
if [ ! -d "$DIST_BASEDIR" ]; then
my_echo -e "\033[37;1mcreate dist directory:\033[0m $DIST_BASEDIR"
do_exec "mkdir -p \"$DIST_BASEDIR\""
fi
DIST_LIST=$(ls "$BUILD_ROOT")
for DL in $DIST_LIST; do
DEPLOY_DIR="$BUILD_ROOT/$DL/tmp/deploy"
do_exec "ln -sf \"$DEPLOY_DIR\" \"$DIST_BASEDIR/$DL\""
if [ -L "$DIST_BASEDIR/$DL/deploy" ]; then
do_exec "unlink \"$DIST_BASEDIR/$DL/deploy\""
fi
done
}
function MD5SUM() {
local MD5SUM_FILE="$1"
md5sum "$MD5SUM_FILE" | cut -f 1 -d " "
}
## Function for selecting items with a custom entry
function do_select() {
local items="$1"
SELECTION=""
local user_input
local valid_selection=0
IFS=' ' read -r -a items_array <<< "$items"
echo "Please select one or more entries (numbers separated by spaces):"
local i=1
for item in "${items_array[@]}"; do
printf "[%2d] %s\n" "$i" "$item"
((i++))
done
printf "\n[%2d] %s\n" "$i" "Enter custom"
printf "\nEnter the numbers of the entries or [$i] for custom entry: "
read -r user_input
for choice in $user_input; do
if [[ "$choice" =~ ^[0-9]+$ ]]; then
if [ "$choice" -ge 1 ] && [ "$choice" -lt "$i" ]; then
SELECTION+="${items_array[$choice-1]} "
valid_selection=1
elif [ "$choice" -eq "$i" ]; then
echo "Enter your custom entry:"
read -r custom_entry
SELECTION+="$custom_entry "
valid_selection=1
else
my_echo "Invalid selection: $choice"
fi
else
my_echo "Invalid selection: $choice"
fi
done
if [ "$valid_selection" -eq 0 ]; then
my_echo "No valid selection made. Process aborted."
return 1
fi
SELECTION=$(echo "$SELECTION" | sed 's/ $//')
my_echo "Selected entries: $SELECTION"
}
## Reset the build. Folders are renamed for safety.
function do_reset() {
do_select "$MACHINES"
local selected_machines="$SELECTION"
if [ -z "$selected_machines" ]; then
return
fi
local start_directory="$BUILD_ROOT_DIR"
local rename_success=0
IFS=' ' read -r -a machines_array <<< "$selected_machines"
for machine in "${machines_array[@]}"; do
my_echo "Reset is being carried out for: $machine"
readarray -t found_dirs < <(find "$start_directory" -type f -name "saved_tmpdir")
for dir in "${found_dirs[@]}"; do
tmp_dir_path=$(cat "$dir")
if [[ -d "$tmp_dir_path" && "$tmp_dir_path" == *"/$machine/tmp"* ]]; then
local timestamp
timestamp=$(date '+%Y%m%d_%H%M%S')
do_exec "mv \"$tmp_dir_path\" \"${tmp_dir_path%/*}/tmp_${timestamp}\""
my_echo "Folder $tmp_dir_path was renamed to ${tmp_dir_path%/*}/tmp_${timestamp}."
rename_success=1
break
fi
done
done
if [ "$rename_success" -eq 0 ]; then
my_echo "\033[33mNo reset could be performed.\033[0m"
else
my_echo "Reset succeeded."
fi
}

787
init.sh
View File

@@ -1,506 +1,365 @@
#!/bin/bash #!/bin/bash
source init.functions.sh
#set -x #set -x
BASEPATH=`pwd` ## Comatible and default image version
FILES_DIR=$BASEPATH/files DEFAULT_IMAGE_VERSION="3.2.4"
MACHINES="h7 hd51 hd60 hd61 osmio4k osmio4kplus" COMPATIBLE_IMAGE_VERSIONS="$DEFAULT_IMAGE_VERSION 3.2"
HINT_SYNTAX='Usage '$0' <machine> <image-version>' IMAGE_VERSION="$DEFAULT_IMAGE_VERSION"
HINT_MACHINES="<$MACHINES all>"
HINT_IMAGE_VERSIONS='<3.2> <3.1> <3.0>'
## global vars
BASEPATH=$(pwd)
SSH=$(which ssh)
GIT_SSH_KEYFILE=""
true="1"
false="0"
DO_UPDATE=$false
DO_RESET=$false
FILES_DIR="$BASEPATH/files"
UPDATE_SERVER_URL="http://localhost"
DIST_DIR="$BASEPATH/dist"
USER_CALL="$0 $@"
## Basename of this script
NAME=$(basename $0)
## Timestamp for logging
TIMESTAMP=$(date '+%Y%m%d_%H%M%S')
## Logfile
LOG_PATH=$BASEPATH/log LOG_PATH=$BASEPATH/log
mkdir -p $LOG_PATH mkdir -p $LOG_PATH
LOGFILE_NAME="$0_`date '+%Y%m%d_%H%M%S'`.log" TMP_LOGFILE="$LOG_PATH/.$0-tmp.log"
LOGFILE=$LOG_PATH/$LOGFILE_NAME
TMP_LOGFILE=$LOG_PATH/.tmp.log
touch $LOGFILE
LOGFILE_LINK=$BASEPATH/$0.log
rm -f $TMP_LOGFILE rm -f $TMP_LOGFILE
rm -f $LOGFILE_LINK LOGFILE_NAME="$NAME"_"$TIMESTAMP.log"
LOGFILE=$LOG_PATH/$LOGFILE_NAME
LOGFILE_LINK=$LOG_PATH/$NAME.log
LOCAL_CONFIG_FILE_INC_PATH=$BASEPATH/local.conf.common.inc
echo "" > $LOGFILE
ln -sf $LOGFILE $LOGFILE_LINK ln -sf $LOGFILE $LOGFILE_LINK
my_echo "true" "$USER_CALL"
## Current build env script version
# set passed parameters BUILD_ENV_VERSION=$(git -C $BASEPATH describe --tags 2>/dev/null)
if [ "$1" = "" ]; then if [ -z "$BUILD_ENV_VERSION" ]; then
MACHINE="all" BUILD_ENV_VERSION="unknown"
else
MACHINE=$1
fi fi
if [ "$2" = "" ]; then ## Machines
IMAGE_VERSION="3.2" # Identical listings
else MACHINES_IDENTICAL_HD51="hd51 ax51 mutant51"
IMAGE_VERSION=$2 MACHINES_IDENTICAL_H7="h7 zgemmah7"
fi MACHINES_IDENTICAL_HD60="hd60 ax60" #TODO: move into gfutures
MACHINES_IDENTICAL_HD61="hd61 ax61" #TODO: move into gfutures
# check for empty machine # gfutures listing
if [ -z "$MACHINE" ]; then MACHINES_GFUTURES="$MACHINES_IDENTICAL_HD51 bre2ze4k"
echo -e "\033[31;1mERROR:\tNo machine defined. Possible machines are $HINT_MACHINES. $HINT_SYNTAX ...\033[0m" # hisilcon listing #TODO: move into gfutures
exit 1 MACHINES_HISI="$MACHINES_IDENTICAL_HD60 $MACHINES_IDENTICAL_HD61"
fi # airdigital listing
MACHINES_AIRDIGITAL="$MACHINES_IDENTICAL_H7"
# edision listing
MACHINES_EDISION="osmio4k osmio4kplus"
# ceryon listing
MACHINES_CERYON="e4hdultra"
# check for valid machine # valid machine list
if [ "$MACHINE" != "hd51" ] && [ "$MACHINE" != "h7" ] && [ "$MACHINE" != "hd60" ] && [ "$MACHINE" != "hd61" ] && [ "$MACHINE" != "osmio4k" ] && [ "$MACHINE" != "osmio4kplus" ] && [ "$MACHINE" != "all" ]; then MACHINES="$MACHINES_GFUTURES $MACHINES_HISI $MACHINES_AIRDIGITAL $MACHINES_EDISION $MACHINES_CERYON"
echo -e "\033[31;1mERROR:\tInvalid machine defined. $HINT_SYNTAX. Possible machines are $HINT_MACHINES\033[0m"
exit 1
fi
# check for image versions MACHINE="all" # default for MACHINE, if not set
if [ "$IMAGE_VERSION" != "3.2" ] && [ "$IMAGE_VERSION" != "3.1" ] && [ "$IMAGE_VERSION" != "3.0" ]; then HINT_MACHINES="Select a valid machine type (empty means <all> as default) <$MACHINES>"
echo -e "\033[31;1mERROR:\tInvalid image version defined. $HINT_SYNTAX. Possible image versions are $HINT_IMAGE_VERSIONS, keep empty for current version\033[0m"
exit 1
fi
echo -e "\033[37;1mNOTE:\tInitialze build environment for image version $IMAGE_VERSION and machine: $MACHINE \033[0m\n" ## Backups
BACKUP_PATH=$BASEPATH/backups
function do_exec() { mkdir -p $BACKUP_PATH
DEX_ARG1=$1
DEX_ARG2=$2
DEX_ARG3=$3
rm -f $TMP_LOGFILE
if [ "$DEX_ARG3" == "show_output" ]; then
$DEX_ARG1
else
$DEX_ARG1 > /dev/null 2>> $TMP_LOGFILE
fi
# echo -e "DEX_ARG1 [$DEX_ARG1] DEX_ARG2 [$DEX_ARG2] DEX_ARG3 [$DEX_ARG3]"
if [ $? != 0 ]; then
LOGTEXT=`cat $TMP_LOGFILE`
echo "$LOGTEXT" >> $LOGFILE
if [ "$DEX_ARG2" != "no_exit" ]; then
if [ "$LOGTEXT" != "" ]; then
echo -e "\033[31;1mERROR:\t\033[0m $LOGTEXT"
fi
exit 1
else
if [ "$LOGTEXT" != "" ]; then
echo -e "\033[37;1mNOTE:\t\033[0m $LOGTEXT"
fi
fi
fi
# if [ $DEX_ARG2 == "no_exit" ]; then
# echo -e "\033[32;1mOK:\033[0m `cat $LOGFILE`"
# fi
}
POKY_NAME=poky-$IMAGE_VERSION
BUILD_ROOT_DIR=$BASEPATH/$POKY_NAME
GUI_LAYER_NAME=meta-neutrino
BACKUP_SUFFIX=bak BACKUP_SUFFIX=bak
YOCTO_GIT_URL=https://git.yoctoproject.org/git/poky # meta-neutrino project URL:
# update of yocto layer is disabled on executing init script, for yocto oe it's better to use a tested tag, defined with $YOCTO_BRANCH_HASH PROJECT_URL="https://github.com/tuxbox-neutrino"
YOCTO_LAYER_DO_UPDATE=0
TUXBOX_LAYER_GIT_URL=https://github.com/neutrino-hd ## Help
show_help() {
PYTHON2_LAYER_NAME=meta-python2 if [[ $LANG == de_* ]]; then
PYTHON2_LAYER_GIT_URL=https://git.openembedded.org echo "Dieses Skript initialisiert und aktualisiert die Entwicklungsumgebung für den Bau von Images und Paketen für verschiedene Maschinenkonfigurationen."
PYTHON2_LAYER_DO_UPDATE=1 echo "Es klont und aktualisiert Meta-Layer aus vorgegebenen Repositories, bereitet die Build-Umgebung vor und unterstützt die Konfiguration für spezifische Maschinentypen."
QT5_LAYER_NAME=meta-qt5
QT5_LAYER_GIT_URL=https://github.com/meta-qt5
QT5_LAYER_DO_UPDATE=1
GIT_CLONE='git clone'
GIT_PULL='git pull -r'
GIT_STASH='git stash'
GIT_STASH_POP='git stash pop'
# set required branch
YOCTO_BRANCH_NAME=""
if [ "$IMAGE_VERSION" = "3.0" ]; then
YOCTO_BRANCH_NAME=zeus
YOCTO_BRANCH_HASH=d88d62c
elif [ "$IMAGE_VERSION" = "3.1" ]; then
YOCTO_BRANCH_NAME=dunfell
YOCTO_BRANCH_HASH=2181825
elif [ "$IMAGE_VERSION" = "3.2" ]; then
YOCTO_BRANCH_NAME=gatesgarth
YOCTO_BRANCH_HASH=60c8482
fi
PYTHON2_BRANCH_HASH=27d2aeb
# clone required branch from yocto
if test ! -d $BUILD_ROOT_DIR/.git; then
echo -e "\033[36;1mCLONE POKY:\033[0m clone branch $YOCTO_BRANCH_NAME from $YOCTO_GIT_URL into $BUILD_ROOT_DIR..."
do_exec "$GIT_CLONE -b $YOCTO_BRANCH_NAME $YOCTO_GIT_URL $POKY_NAME" ' ' 'show_output'
echo -e "set $POKY_NAME-repository to required yocto-release $IMAGE_VERSION at commit $YOCTO_BRANCH_HASH..."
do_exec "git -C $BUILD_ROOT_DIR reset --hard $YOCTO_BRANCH_HASH"
echo -e "create local branch $IMAGE_VERSION at commit $YOCTO_BRANCH_HASH..."
do_exec "git -C $BUILD_ROOT_DIR checkout $YOCTO_BRANCH_HASH -b $IMAGE_VERSION"
echo -e "create local tag $IMAGE_VERSION..."
do_exec "git -C $BUILD_ROOT_DIR tag $IMAGE_VERSION"
# if [ $YOCTO_LAYER_DO_UPDATE != 0 ]; then
# do_exec "git pull -C $BUILD_ROOT_DIR origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
# fi
echo -e "\033[36;1mdone ...\033[0m\n"
else
if [ $YOCTO_LAYER_DO_UPDATE != 0 ]; then
CURRENT_YOCTO_BRANCH=`git -C $BUILD_ROOT_DIR rev-parse --abbrev-ref HEAD`
echo -e "\033[36;1mUPDATE poky:\033[0m\nupdate $CURRENT_YOCTO_BRANCH..."
echo -e "switch from $CURRENT_YOCTO_BRANCH to $IMAGE_VERSION..."
do_exec "git -C $BUILD_ROOT_DIR checkout $IMAGE_VERSION" ' ' 'show_output'
echo -e "update $POKY_NAME from (branch $YOCTO_BRANCH_NAME) $YOCTO_GIT_URL ..."
do_exec "git pull -r -C $BUILD_ROOT_DIR origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
echo -e "switch back to $YOCTO_BRANCH_NAME ..."
do_exec "git -C $BUILD_ROOT_DIR checkout $YOCTO_BRANCH_NAME" ' ' 'show_output'
do_exec "git pull -r -C $BUILD_ROOT_DIR origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
echo -e "switch back to $IMAGE_VERSION ..."
do_exec "git -C $BUILD_ROOT_DIR checkout $IMAGE_VERSION" ' ' 'show_output'
echo -e "\033[36;1mdone ...\033[0m\n"
else else
YOCTO_BRANCH_HASH_CURRENT=`git -C $BUILD_ROOT_DIR rev-parse --verify HEAD | awk '{print substr($0, 0,7)}'` echo "This script initializes and updates the development environment for building images and packages for various machine configurations."
HAS_CHANGES=0 echo "It clones and updates meta-layers from specified repositories, prepares the build environment, and supports configuration for specific machine types."
if [[ "$YOCTO_BRANCH_HASH_CURRENT" != "$YOCTO_BRANCH_HASH" ]]; then
HAS_CHANGES=1
LOCAL_YOCTO_BRANCH=$IMAGE_VERSION.mod.$YOCTO_BRANCH_HASH_CURRENT
echo -e "\033[36;1mupdate yocto: found local changes, create branch $LOCAL_YOCTO_BRANCH\033[0m\n"
do_exec "git -C $BUILD_ROOT_DIR checkout $YOCTO_BRANCH_HASH_CURRENT -b $LOCAL_YOCTO_BRANCH"
echo -e "\033[36;1mswitch to required branch $YOCTO_BRANCH_NAME at $YOCTO_BRANCH_HASH\033[0m\n"
do_exec "git -C $BUILD_ROOT_DIR checkout $IMAGE_VERSION"
fi
if [ $HAS_CHANGES=0 ]; then
echo -e "\033[36;1mkeeping $YOCTO_BRANCH_NAME at $YOCTO_BRANCH_HASH\033[0m\n"
do_exec "git -C $BUILD_ROOT_DIR reset --hard $YOCTO_BRANCH_HASH"
fi
fi
fi
# clone or update required branch from gui meta layer
if test ! -d $BUILD_ROOT_DIR/$GUI_LAYER_NAME/.git; then
echo -e "\033[33;1mCLONE $GUI_LAYER_NAME:\033[0m\nclone $GUI_LAYER_NAME (branch $YOCTO_BRANCH_NAME) from $TUXBOX_LAYER_GIT_URL ..."
do_exec "cd $BUILD_ROOT_DIR"
do_exec "$GIT_CLONE -b $YOCTO_BRANCH_NAME $TUXBOX_LAYER_GIT_URL/$GUI_LAYER_NAME.git $GUI_LAYER_NAME" ' ' 'show_output'
echo -e "\033[33;1mdone ...\033[0m\n"
else
do_exec "cd $BUILD_ROOT_DIR/$GUI_LAYER_NAME"
CURRENT_GUI_LAYER_BRANCH=`git -C $BUILD_ROOT_DIR/$GUI_LAYER_NAME rev-parse --abbrev-ref HEAD`
echo -e "\033[33;1mUPDATE: update $GUI_LAYER_NAME $CURRENT_GUI_LAYER_BRANCH\033[0m"
do_exec "$GIT_STASH" 'no_exit'
if [ "$CURRENT_GUI_LAYER_BRANCH" != "$YOCTO_BRANCH_NAME" ]; then
echo -e "\033[37;1mCHECKOUT:\033[0m\nswitch from $CURRENT_GUI_LAYER_BRANCH to $YOCTO_BRANCH_NAME..."
do_exec "git checkout $YOCTO_BRANCH_NAME"
fi
echo -e "\033[37;1mUPDATE:\033[0m\nupdate $GUI_LAYER_NAME from (branch $YOCTO_BRANCH_NAME) $TUXBOX_LAYER_GIT_URL ..."
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
if [ "$CURRENT_GUI_LAYER_BRANCH" != "$YOCTO_BRANCH_NAME" ]; then
echo -e "\033[37;1mCHECKOUT:\033[0m\nswitch back to $CURRENT_GUI_LAYER_BRANCH ..."
do_exec "git checkout $CURRENT_GUI_LAYER_BRANCH"
echo -e "\033[37;1mREBASE:\033[0m\nrebase branch $YOCTO_BRANCH_NAME into $CURRENT_GUI_LAYER_BRANCH"
do_exec "git rebase $YOCTO_BRANCH_NAME" ' ' 'show_output'
fi
do_exec "$GIT_STASH_POP" 'no_exit'
echo -e "\033[33;1mdone ...\033[0m\n"
fi
# clone or update required branch for python2 from https://git.openembedded.org/meta-python2
function clone_meta_python2 () {
META_MACHINE_LAYER=meta-$1
if [ $PYTHON2_LAYER_DO_UPDATE == "1" ] && [ "$IMAGE_VERSION" != "3.0" ] && [ "$IMAGE_VERSION" != "3.1" ] && test -d $BUILD_ROOT_DIR/$META_MACHINE_LAYER/recipes-multimedia/kodi; then
$CURRENT_PYTHON_LAYER_BRANCH
if test ! -d $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME/.git; then
echo -e "\033[35;1mCLONE $PYTHON2_LAYER_NAME:\033[0m\nclone $PYTHON2_LAYER_NAME (branch $YOCTO_BRANCH_NAME) from $PYTHON2_LAYER_GIT_URL ..."
do_exec "cd $BUILD_ROOT_DIR"
do_exec "$GIT_CLONE -b $YOCTO_BRANCH_NAME $PYTHON2_LAYER_GIT_URL/$PYTHON2_LAYER_NAME $PYTHON2_LAYER_NAME" ' ' 'show_output'
do_exec "git -C $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME checkout $PYTHON2_BRANCH_HASH -b $IMAGE_VERSION"
do_exec "git -C $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME am $FILES_DIR/0001-local_conf_outcomment_line_15.patch" ' ' 'show_output'
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
echo -e "\033[35;1mdone ...\033[0m\n"
else
do_exec "cd $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME"
CURRENT_PYTHON_LAYER_BRANCH=`git -C $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME rev-parse --abbrev-ref HEAD`
echo -e "\033[35;1mUPDATE: update $PYTHON2_LAYER_NAME $CURRENT_PYTHON_LAYER_BRANCH\033[0m"
do_exec "$GIT_STASH" 'no_exit'
if [ "$CURRENT_PYTHON_LAYER_BRANCH" != "$YOCTO_BRANCH_NAME" ]; then
echo -e "\033[35;1mCHECKOUT:\033[0m\nswitch from $CURRENT_PYTHON_LAYER_BRANCH to $YOCTO_BRANCH_NAME..."
do_exec "git checkout $YOCTO_BRANCH_NAME"
fi
#echo -e "\033[35;1mUPDATE:\033[0m\nupdate $PYTHON2_LAYER_NAME from (branch $YOCTO_BRANCH_NAME) $PYTHON2_LAYER_GIT_URL ..."
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
if [ "$CURRENT_PYTHON_LAYER_BRANCH" != "$YOCTO_BRANCH_NAME" ]; then
echo -e "\033[35;1mCHECKOUT:\033[0m\nswitch back to $CURRENT_PYTHON_LAYER_BRANCH ..."
do_exec "git checkout $CURRENT_PYTHON_LAYER_BRANCH"
echo -e "\033[35;1mREBASE:\033[0m\nrebase branch $YOCTO_BRANCH_NAME into $CURRENT_PYTHON_LAYER_BRANCH"
do_exec "git rebase $YOCTO_BRANCH_NAME" ' ' 'show_output'
fi
do_exec "$GIT_STASH_POP" 'no_exit'
echo -e "\033[35;1mdone ...\033[0m\n"
PYTHON2_LAYER_DO_UPDATE=0
fi
fi fi
echo ""
echo "Usage: $0 [OPTIONS]..."
echo ""
echo "Options:"
echo " -m, --machine $HINT_MACHINES"
echo " --update-url URL (IP, hostname or domain, optional with portnumber) to define the update server address for $LOCAL_CONFIG_FILE_INC_PATH, default: $UPDATE_SERVER_URL"
echo " --dist-dir Directory where to find the deployed images and packages, default: $DIST_DIR"
echo " -p, --project-url Project-URL where to find project meta layers,"
echo " e.g. for read and write access: git@github.com:tuxbox-neutrino, default = $PROJECT_URL"
echo " --image-version Sets the required image version to build, possible versions are: $COMPATIBLE_IMAGE_VERSIONS, default = $DEFAULT_IMAGE_VERSION"
echo " -u, --update Update your project meta layers"
echo " -r, --reset Resets the tmp dir within the build directory, $BASEPATH/poky-x.x.x/build/<machine>/tmp. The /tmp directory will be not deleted but renamed"
echo " -i, --id-rsa-file Path to your preferred id rsa file, default: users id rsa file, e.g. $HOME/.ssh/id_rsa"
echo ""
echo " -h, --help Show this help"
echo " --version Show version information for buildenv script"
} }
# clone or update required branch for qt5 ## Processing command line arguments
function clone_meta_qt5 () { TEMP=$(getopt -o rup:m:i:h --long reset,update-url:,dist-dir:,update,project-url:,machine:,id-rsa-file,image-version:,help,version -n 'init' -- "$@")
META_MACHINE_LAYER=meta-$1 if [ $? != 0 ] ; then
my_echo "Error while process arguments" >&2
if [ $QT5_LAYER_DO_UPDATE == "1" ] && [ "$IMAGE_VERSION" != "3.0" ] && [ "$IMAGE_VERSION" != "3.1" ] && test -d $BUILD_ROOT_DIR/$META_MACHINE_LAYER/recipes-multimedia/kodi; then show_help
$CURRENT_QT_LAYER_BRANCH
if test ! -d $BUILD_ROOT_DIR/$QT5_LAYER_NAME/.git; then
echo -e "\033[35;1mCLONE $QT5_LAYER_NAME:\033[0m\nclone $QT5_LAYER_NAME (branch $YOCTO_BRANCH_NAME) from $QT5_LAYER_GIT_URL ..."
do_exec "cd $BUILD_ROOT_DIR"
do_exec "$GIT_CLONE -b $YOCTO_BRANCH_NAME $QT5_LAYER_GIT_URL/$QT5_LAYER_NAME $QT5_LAYER_NAME" ' ' 'show_output'
do_exec "git -C $BUILD_ROOT_DIR/$QT5_LAYER_NAME checkout $QT5_BRANCH_HASH -b $IMAGE_VERSION"
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
echo -e "\033[35;1mdone ...\033[0m\n"
else
do_exec "cd $BUILD_ROOT_DIR/$QT5_LAYER_NAME"
CURRENT_QT_LAYER_BRANCH=`git -C $BUILD_ROOT_DIR/$QT5_LAYER_NAME rev-parse --abbrev-ref HEAD`
echo -e "\033[35;1mUPDATE: update $QT5_LAYER_NAME $CURRENT_QT_LAYER_BRANCH\033[0m"
do_exec "$GIT_STASH" 'no_exit'
if [ "$CURRENT_QT_LAYER_BRANCH" != "$YOCTO_BRANCH_NAME" ]; then
echo -e "\033[35;1mCHECKOUT:\033[0m\nswitch from $CURRENT_QT_LAYER_BRANCH to $YOCTO_BRANCH_NAME..."
do_exec "git checkout $YOCTO_BRANCH_NAME"
fi
#echo -e "\033[35;1mUPDATE:\033[0m\nupdate $QT5_LAYER_NAME from (branch $YOCTO_BRANCH_NAME) $QT5_LAYER_GIT_URL ..."
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
if [ "$CURRENT_QT_LAYER_BRANCH" != "$YOCTO_BRANCH_NAME" ]; then
echo -e "\033[35;1mCHECKOUT:\033[0m\nswitch back to $CURRENT_QT_LAYER_BRANCH ..."
do_exec "git checkout $CURRENT_QT_LAYER_BRANCH"
echo -e "\033[35;1mREBASE:\033[0m\nrebase branch $YOCTO_BRANCH_NAME into $CURRENT_QT_LAYER_BRANCH"
do_exec "git rebase $YOCTO_BRANCH_NAME" ' ' 'show_output'
fi
do_exec "$GIT_STASH_POP" 'no_exit'
echo -e "\033[35;1mdone ...\033[0m\n"
QT5_LAYER_DO_UPDATE=0
fi
fi
}
function get_metaname () {
TMP_NAME=$1
if [ "$TMP_NAME" == "hd51" ]; then
META_NAME="hd51"
elif [ "$TMP_NAME" == "h7" ]; then
META_NAME="zgemma"
elif [ "$TMP_NAME" == "hd60" ] || [ "$TMP_NAME" == "hd61" ]; then
META_NAME="hisilicon"
elif [ "$TMP_NAME" == "osmio4k" ] || [ "$TMP_NAME" == "osmio4kplus" ]; then
META_NAME="edision"
else
META_NAME=$TMP_NAME
fi
echo "$META_NAME"
}
# function for clone or update required branch(es) from machine meta layer
function clone_box_layer () {
NAME=`get_metaname $1`
if [ "$NAME" != "all" ]; then
if test ! -d $BUILD_ROOT_DIR/meta-$NAME/.git; then
echo -e "\033[34;1mCLONE: clone meta-$NAME (branch $YOCTO_BRANCH_NAME) from $TUXBOX_LAYER_GIT_URL ...\033[0m"
do_exec "cd $BUILD_ROOT_DIR"
do_exec "$GIT_CLONE -b $YOCTO_BRANCH_NAME $TUXBOX_LAYER_GIT_URL/meta-$NAME.git" ' ' 'show_output'
echo -e "\033[34;1mdone ...\033[0m\n"
if test ! -d $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME; then
clone_meta_python2 $NAME
fi
if test ! -d $BUILD_ROOT_DIR/$QT5_LAYER_NAME; then
clone_meta_qt5 $NAME
fi
else
do_exec "cd $BUILD_ROOT_DIR/meta-$NAME"
do_exec "$GIT_STASH" 'no_exit'
CURRENT_MACHINE_LAYER_BRANCH=`git -C $BUILD_ROOT_DIR/meta-$NAME rev-parse --abbrev-ref HEAD`
if [ "$CURRENT_MACHINE_LAYER_BRANCH" != "$YOCTO_BRANCH_NAME" ]; then
echo -e "\033[37;1mCHECKOUT:\033[0m\nswitch from $CURRENT_MACHINE_LAYER_BRANCH to $YOCTO_BRANCH_NAME..."
do_exec "git checkout $YOCTO_BRANCH_NAME"
fi
echo -e "\033[34;1mUPDATE: update meta-$NAME (branch $YOCTO_BRANCH_NAME) from $TUXBOX_LAYER_GIT_URL ...\033[0m"
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
if [ "$CURRENT_MACHINE_LAYER_BRANCH" != "$YOCTO_BRANCH_NAME" ]; then
echo -e "\033[37;1mCHECKOUT:\033[0m\nswitch back to $CURRENT_MACHINE_LAYER_BRANCH ..."
do_exec "git checkout $CURRENT_MACHINE_LAYER_BRANCH"
echo -e "\033[37;1mREBASE:\033[0m\nrebase branch $YOCTO_BRANCH_NAME into $CURRENT_MACHINE_LAYER_BRANCH"
do_exec "git rebase $YOCTO_BRANCH_NAME" ' ' 'show_output'
fi
do_exec "$GIT_STASH_POP" 'no_exit'
echo -e "\033[34;1mdone ...\033[0m\n"
clone_meta_python2 $NAME
clone_meta_qt5 $NAME
fi
fi
}
# clone or update meta layers
if [ "$MACHINE" == "all" ]; then
for M in $MACHINES ; do
clone_box_layer $M;
done
else
clone_box_layer $MACHINE;
fi
# create included config file from sample file
if test ! -f $BASEPATH/local.conf.common.inc; then
echo -e "\033[37;1mCONFIG:\033[0m\tcreate $BASEPATH/local.conf.common.inc as include file for layer configuration ..."
do_exec "cp -v $BASEPATH/local.conf.common.inc.sample $BASEPATH/local.conf.common.inc"
else
echo -e "\033[37;1mNOTE:\t Local configuration not considered\033[0m"
echo -e "\t##########################################################################################"
echo -e "\t# $BASEPATH/local.conf.common.inc already exists. #"
echo -e "\t# Nothing was changed on this file for your configuration. #"
echo -e "\t# Possible changes at sample configuration will be ignored. #"
echo -e "\t# You should check local configuration and modify your configuration if required. #"
echo -e "\t# \033[37;1m$BASEPATH/local.conf.common.inc\033[0m #"
echo -e "\t##########################################################################################"
fi
# function to create configuration for box types
function create_local_config () {
CLC_ARG1=$1
if [ "$CLC_ARG1" != "all" ]; then
BOX_BUILD_DIR=$BUILD_ROOT_DIR/$CLC_ARG1
# generate default config
if test ! -d $BOX_BUILD_DIR/conf; then
echo -e "\033[37;1m\tcreate directory for $CLC_ARG1 environment ...\033[0m"
do_exec "cd $BUILD_ROOT_DIR"
do_exec ". ./oe-init-build-env $CLC_ARG1"
do_exec "cd $BASEPATH"
fi
# move config files into conf directory
if test -f $BASEPATH/local.conf.common.inc; then
if test ! -f $BOX_BUILD_DIR/conf/local.conf.$BACKUP_SUFFIX; then
echo -e "\tset base configuration for $CLC_ARG1 ... "
do_exec "mv -v $BOX_BUILD_DIR/conf/local.conf $BOX_BUILD_DIR/conf/local.conf.$BACKUP_SUFFIX"
echo 'MACHINE ?= "'$CLC_ARG1'"' > $BOX_BUILD_DIR/conf/local.conf
echo "include $BASEPATH/local.conf.common.inc" >> $BOX_BUILD_DIR/conf/local.conf
fi
else
echo -e "\033[31;1mERROR:\033[0m:\ttemplate $BASEPATH/local.conf.common.inc not found..."
exit 1 exit 1
fi fi
if test ! -f $BOX_BUILD_DIR/conf/bblayers.conf.$BACKUP_SUFFIX; then # Note the quotes around `$TEMP`: they are essential!
echo -e "\033[37;1m\tset base bblayer configuration for $CLC_ARG1...\033[0m" eval set -- "$TEMP"
do_exec "cp -v $BOX_BUILD_DIR/conf/bblayers.conf $BOX_BUILD_DIR/conf/bblayers.conf.$BACKUP_SUFFIX"
META_MACHINE_LAYER=meta-`get_metaname $CLC_ARG1`
echo 'BBLAYERS += " \
'$BUILD_ROOT_DIR'/meta-neutrino \
'$BUILD_ROOT_DIR'/'$META_MACHINE_LAYER' \
"' >> $BOX_BUILD_DIR/conf/bblayers.conf
if test -d $BUILD_ROOT_DIR/$META_MACHINE_LAYER/recipes-multimedia/kodi; then
echo 'BBLAYERS += " \
'$BUILD_ROOT_DIR'/'$PYTHON2_LAYER_NAME' \
"' >> $BOX_BUILD_DIR/conf/bblayers.conf
fi
if test -d $BUILD_ROOT_DIR/$QT5_LAYER_NAME; then
echo 'BBLAYERS += " \
'$BUILD_ROOT_DIR'/'$QT5_LAYER_NAME' \
"' >> $BOX_BUILD_DIR/conf/bblayers.conf
fi
fi
fi
}
# function create local dist directory to prepare for web access # Extract arguments.
function create_dist_tree () { while true ; do
PAR1=$1 case "$1" in
if [ "$PAR1" != "all" ]; then -p|--project-url)
PROJECT_URL="$2"; shift 2 ;;
-m|--machine)
MACHINE="$2"; shift 2 ;;
-i|--id-rsa-file)
GIT_SSH_KEYFILE="$2"; shift 2 ;;
--update-url)
UPDATE_SERVER_URL="$2"; shift 2 ;;
--dist-dir)
DIST_DIR="$2"; shift 2 ;;
-u|--update)
DO_UPDATE="$true"; shift ;;
-r|--reset)
DO_RESET="$true"; shift ;;
--image-version)
IMAGE_VERSION="$2"; shift 2 ;;
-h|--help)
show_help
exit 0 ;;
--version)
echo "$BUILD_ENV_VERSION"
exit 0 ;;
--) shift ; break ;;
*) echo "Internal Error!" ; exit 1 ;;
esac
done
DIST_BASEDIR="$BASEPATH/dist/$IMAGE_VERSION" ## Validate the chosen image version
DIST_LINK=$DIST_BASEDIR/$PAR1 if [[ ! " $COMPATIBLE_IMAGE_VERSIONS " =~ " $IMAGE_VERSION " ]]; then
DIST_LINK_IMAGES=$DIST_BASEDIR/$PAR1/images my_echo "\033[31;1mError: Invalid image version specified '$IMAGE_VERSION'. Available versions are: [$COMPATIBLE_IMAGE_VERSIONS]\033[0m"
DIST_LINK_IPK=$DIST_BASEDIR/$PAR1/ipk exit 1
DIST_LINK_LICENSE=$DIST_BASEDIR/$PAR1/licenses fi
if test ! -d "$DIST_LINK"; then ## Layer sources
echo -e "\n\033[37;1mcreate directory:\033[0m $DIST_LINK" YOCTO_GIT_URL="https://github.com/yoctoproject/poky.git"
do_exec "mkdir -p $DIST_LINK" POKY="$(basename $YOCTO_GIT_URL .git)"
fi POKY_NAME="$IMAGE_VERSION" #TODO
BUILD_ROOT_DIR="$BASEPATH/$POKY-$IMAGE_VERSION"
BUILD_ROOT="$BUILD_ROOT_DIR/build"
DEPLOY_DIR=$BUILD_ROOT_DIR/$PAR1/tmp/deploy OE_LAYER_NAME=meta-openembedded
DEPLOY_DIR_IMAGES=$DEPLOY_DIR/images/$PAR1 OE_LAYER_GIT_URL=https://github.com/openembedded/meta-openembedded.git
DEPLOY_DIR_IPK=$DEPLOY_DIR/ipk OE_LAYER_PATCH_LIST=""
DEPLOY_DIR_LICENSE=$DEPLOY_DIR/licenses
if test ! -L "$DIST_LINK_IMAGES"; then OE_CORE_LAYER_NAME=openembedded-core
echo -e "\033[37;1mcreate symlink:\033[0m $DIST_LINK_IMAGES" OE_CORE_LAYER_GIT_URL=https://github.com/openembedded/openembedded-core.git
do_exec "ln -sf $DEPLOY_DIR_IMAGES $DIST_LINK_IMAGES"
fi
if test ! -L "$DIST_LINK_IPK"; then ## Preset required branches and revs based on the selected image version
echo -e "\033[37;1mcreate symlink:\033[0m $DIST_LINK_IPK" case "$IMAGE_VERSION" in
do_exec "ln -sf $DEPLOY_DIR_IPK $DIST_LINK_IPK" "3.2"|"3.2.4")
fi COMPATIBLE_TAG="$IMAGE_VERSION"
COMPATIBLE_BRANCH="gatesgarth"
YOCTO_SRCREV="bc71ec0"
PYTHON2_SRCREV="27d2aeb"
OE_SRCREV="f3f7a5f"
OE_LAYER_PATCH_LIST="0001-openembedded-disable-meta-python.patch 0002-openembedded-disable-openembedded-layer-meta-phyton.patch"
;;
*)
my_echo "\033[31;1mError: No valid configuration for the specified image version '$IMAGE_VERSION'.\033[0m"
exit 1
;;
esac
if test ! -L "$DIST_LINK_LICENSE"; then # Check machine type
echo -e "\033[37;1mcreate symlink:\033[0m $DIST_LINK_LICENSE" if [ "$(is_valid_machine "$MACHINE")" = "false" ]; then
do_exec "ln -sf $DEPLOY_DIR_LICENSE $DIST_LINK_LICENSE" my_echo "\033[31;1mNo valid machine defined.\033[0m"
fi my_echo "$HINT_MACHINES"
fi exit 1
} fi
# create configuration for machine my_echo "------------------------------------------------------------------------------------------"
my_echo "Buildenv Version: \033[37;1m$BUILD_ENV_VERSION\033[0m "
my_echo "Image Version: \033[37;1m$IMAGE_VERSION\033[0m "
my_echo "Compatible OE-branch: \033[37;1m$COMPATIBLE_BRANCH\033[0m "
my_echo "Buildroot directory: \033[37;1m$BUILD_ROOT_DIR\033[0m "
my_echo "Update Server URL: \033[37;1m$UPDATE_SERVER_URL\033[0m "
my_echo "Dist directory: \033[37;1m$DIST_DIR\033[0m "
my_echo "Configured Machine(s): \033[37;1m$MACHINE\033[0m "
my_echo "Project Repository URL: \033[37;1m$PROJECT_URL\033[0m "
my_echo "SRCREV Yocto: \033[37;1m$YOCTO_SRCREV\033[0m "
my_echo "SRCREV OE: \033[37;1m$OE_SRCREV\033[0m "
my_echo "SRCREV Python2: \033[37;1m$PYTHON2_SRCREV\033[0m "
my_echo "------------------------------------------------------------------------------------------"
## reset build
if [[ $DO_RESET == "$true" ]]; then
do_reset "$MACHINES"
exit 0
fi
## Fetch meta sources
# fetch required branch from yocto
fetch_meta "" $COMPATIBLE_BRANCH $YOCTO_GIT_URL $YOCTO_SRCREV $BUILD_ROOT_DIR
# fetch required branch from openembedded
fetch_meta "" $COMPATIBLE_BRANCH $OE_LAYER_GIT_URL $OE_SRCREV $BUILD_ROOT_DIR/$OE_LAYER_NAME "$OE_LAYER_PATCH_LIST"
# fetch required branch of oe-core from openembedded
fetch_meta "" master $OE_CORE_LAYER_GIT_URL "" $BUILD_ROOT_DIR/$OE_CORE_LAYER_NAME
# fetch required branch for meta-python2
if [[ -n "$PYTHON2_SRCREV" ]]; then
PYTHON2_LAYER_NAME=meta-python2
PYTHON2_LAYER_GIT_URL=https://git.openembedded.org/$PYTHON2_LAYER_NAME
PYTHON2_PATCH_LIST="0001-local_conf_outcomment_line_15.patch"
fetch_meta "" $COMPATIBLE_BRANCH $PYTHON2_LAYER_GIT_URL $PYTHON2_SRCREV $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME "$PYTHON2_PATCH_LIST"
fi
# fetch required branch for meta-qt5
QT5_LAYER_NAME=meta-qt5
QT5_LAYER_GIT_URL=https://github.com/meta-qt5/$QT5_LAYER_NAME
fetch_meta "" $COMPATIBLE_BRANCH $QT5_LAYER_GIT_URL "" $BUILD_ROOT_DIR/$QT5_LAYER_NAME
# fetch required branch from meta-neutrino
TUXBOX_LAYER_NAME="meta-neutrino"
TUXBOX_LAYER_BRANCH="master"
TUXBOX_LAYER_SRCREV="ffc1b65ec3cfd2c6bbd339d3ce201d6b39abd527"
TUXBOX_LAYER_GIT_URL="${PROJECT_URL}/$TUXBOX_LAYER_NAME.git"
fetch_meta "" $TUXBOX_LAYER_BRANCH $TUXBOX_LAYER_GIT_URL "$TUXBOX_LAYER_SRCREV" $BUILD_ROOT_DIR/$TUXBOX_LAYER_NAME
safe_dir="$BUILD_ROOT_DIR/$TUXBOX_LAYER_NAME"
if ! git config --global --get safe.directory | grep -qxF "$safe_dir"; then
do_exec "git config --global --add safe.directory \"$safe_dir\""
fi
# fetch required branch from meta-airdigital
AIRDIGITAL_LAYER_NAME="meta-airdigital"
AIRDIGITAL_LAYER_BRANCH="master"
AIRDIGITAL_LAYER_SRCREV="ac8f769e35f839bbcf9c38d2b2b98513be907ac1"
AIRDIGITAL_LAYER_GIT_URL="$PROJECT_URL/$AIRDIGITAL_LAYER_NAME.git"
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_AIRDIGITAL '") == true ]; then
fetch_meta "" $AIRDIGITAL_LAYER_BRANCH $AIRDIGITAL_LAYER_GIT_URL "$AIRDIGITAL_LAYER_SRCREV" $BUILD_ROOT_DIR/$AIRDIGITAL_LAYER_NAME
fi
# fetch required branch from meta-gfutures
GFUTURES_LAYER_NAME=meta-gfutures
GFUTURES_LAYER_BRANCH="master"
GFUTURES_LAYER_SRCREV="bfceb9d2f79a8403ce1bdf1ad14a1714f781fed3"
GFUTURES_LAYER_GIT_URL="$PROJECT_URL/$GFUTURES_LAYER_NAME.git"
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_GFUTURES '") == true ]; then
# gfutures
fetch_meta "" $GFUTURES_LAYER_BRANCH $GFUTURES_LAYER_GIT_URL "$GFUTURES_LAYER_SRCREV" $BUILD_ROOT_DIR/$GFUTURES_LAYER_NAME
fi
# fetch required branch from meta-ceryon
CERYON_LAYER_NAME=meta-ceryon
CERYON_LAYER_BRANCH="master"
CERYON_LAYER_SRCREV="4a02145fc4c233b64f6110d166c46b59ebe73371"
CERYON_LAYER_GIT_URL="$PROJECT_URL/$CERYON_LAYER_NAME.git"
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_CERYON '") == true ]; then
fetch_meta "" $CERYON_LAYER_BRANCH $CERYON_LAYER_GIT_URL "$CERYON_LAYER_SRCREV" $BUILD_ROOT_DIR/$CERYON_LAYER_NAME
fi
# fetch required branch from meta-hisilicon #TODO: move into gfutures
HISI_LAYER_NAME=meta-hisilicon #TODO: move into gfutures
HISI_LAYER_BRANCH="master"
HISI_LAYER_SRCREV="e85e1781704d96f5dfa0c554cf81d24c147d888c"
HISI_LAYER_GIT_URL="$PROJECT_URL/$HISI_LAYER_NAME.git"
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_HISI '") == true ]; then
fetch_meta "" $HISI_LAYER_BRANCH $HISI_LAYER_GIT_URL "$HISI_LAYER_SRCREV" $BUILD_ROOT_DIR/$HISI_LAYER_NAME
fi
# fetch required branch from meta-edision
EDISION_LAYER_NAME=meta-edision
EDISION_LAYER_BRANCH="master"
EDISION_LAYER_SRCREV="1b2c422d9218e86ca1cd9d20431d42e716b1d714"
EDISION_LAYER_GIT_URL="$PROJECT_URL/$EDISION_LAYER_NAME.git"
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_EDISION '") == true ]; then
fetch_meta '' $EDISION_LAYER_BRANCH $EDISION_LAYER_GIT_URL "$EDISION_LAYER_SRCREV" $BUILD_ROOT_DIR/$EDISION_LAYER_NAME
fi
## Configure buildsystem
# Create included config file from sample file
if test ! -f $LOCAL_CONFIG_FILE_INC_PATH; then
my_echo "\033[37;1mCONFIG:\033[0mCreate $LOCAL_CONFIG_FILE_INC_PATH as include file for local layer configuration ..."
do_exec "cp -v $LOCAL_CONFIG_FILE_INC_PATH.sample $LOCAL_CONFIG_FILE_INC_PATH"
do_exec "sed -i -e 's|#UPDATE_SERVER_URL = \"http://@hostname@\"|UPDATE_SERVER_URL = \"${UPDATE_SERVER_URL}\"|' $LOCAL_CONFIG_FILE_INC_PATH"
fi
# Create configuration for machine
my_echo "\033[37;1mCreate configurations ...\033[0m"
if [ "$MACHINE" == "all" ]; then if [ "$MACHINE" == "all" ]; then
for M in $MACHINES ; do for M in $MACHINES ; do
create_local_config $M; create_local_config $M;
create_dist_tree $M;
done done
my_echo "\033[32;1mdone!\033[0m\n"
else else
create_local_config $MACHINE; create_local_config $MACHINE;
create_dist_tree $MACHINE; my_echo "\033[32;1mdone!\033[0m\n"
fi fi
# check and create distribution directory inside html directory for online update ## Create distribution structure
if test ! -L /var/www/html/dist; then create_dist_tree;
echo -e "\033[37;1mNOTE:\t Online update usage.\033[0m"
echo -e "\t##########################################################################################" ## Distribution directory inside httpd directory for online update
echo -e "\t# /var/www/html/dist doesn't exists. #" my_echo "\033[37;1mLocal setup for package online update.\033[0m"
echo -e "\t# If you want to use online update, please configure your webserver and use dist content #" my_echo "------------------------------------------------------------------------------------------------"
echo -e "\t# Super user permissions are required to create symlink... #" my_echo "If you want to use online update for your devices, please configure your webserver and use the"
echo -e "\t# An easy way is to create a symlink to dist directory: #" my_echo "content of $DIST_DIR"
echo -e "\t# \033[37;1msudo ln -s $BASEPATH/dist /var/www/html/dist\033[0m #" my_echo "as destination for your webserver (e.g. apache, nginx, lighttpd or what ever you want)"
echo -e "\t########################################################################################## " my_echo ""
fi
## Show results
my_echo "\033[32;1m\nSummary:\033[0m"
my_echo "\033[32;1m------------------------------------------------------------------------------------------------\033[0m"
my_echo ""
my_echo "\033[37;1mLocal environment setup was created\033[0m"
my_echo "------------------------------------------------------------------------------------------------"
my_echo "On 1st call of $0 Your config was created at this file from the template sample file"
my_echo ""
my_echo "\033[37;1m\t$BASEPATH/local.conf.common.inc\033[0m"
my_echo ""
my_echo "If this file has already exists some entries could be migrated or added on this file."
my_echo "You should check $BASEPATH/local.conf.common.inc and modify it if required."
my_echo ""
my_echo "Unlike here: Please check this files for modifications or upgrades:"
my_echo ""
my_echo "\033[37;1m\t$BUILD_ROOT/<machine>/bblayer.conf\033[0m"
my_echo "\033[37;1m\t$BUILD_ROOT/<machine>/local.conf\033[0m"
my_echo ""
my_echo "\033[37;1mUpdating build evironment and meta-layers\033[0m"
my_echo "------------------------------------------------------------------------------------------------"
my_echo ""
my_echo "\033[37;1m\texecute: $0\033[0m \033[32;1m--update\033[0m"
my_echo ""
my_echo "------------------------------------------------------------------------------------------------"
my_echo "\033[32;1mDONE!\033[0m"
my_echo ""
my_echo "\033[37;1mStart build\033[0m"
my_echo "------------------------------------------------------------------------------------------------"
my_echo "Now you are ready to build your own images and packages."
my_echo "Selectable machines are:"
my_echo ""
my_echo "\033[37;1m\t$MACHINES\033[0m"
my_echo ""
my_echo "Select your favorite machine (or identical) and the next steps are:\033[37;1m"
my_echo ""
my_echo "\tcd $BUILD_ROOT_DIR && . ./oe-init-build-env build/<machine>"
my_echo "\tbitbake neutrino-image"
my_echo "\033[0m"
my_echo "For more information and next steps take a look at the README.md!"
echo -e "\033[32;1mDONE!\033[0m"
exit 0 exit 0

View File

@@ -1,51 +1,43 @@
### Host variables ### See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=distro_codename#term-CONF_VERSION
# CONF_VERSION = "1"
### Host options
# Determine how many tasks bitbake should run in parallel: # Determine how many tasks bitbake should run in parallel:
BB_NUMBER_THREADS ?= "8" # NOTE: The build system already calculates the optimized values for your host system.
# # See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=distro_codename#term-BB_NUMBER_THREADS
# Determine how many processes make should run in parallel when running compile tasks: #BB_NUMBER_THREADS = "16"
PARALLEL_MAKE ?= "-j 4" # Determine how many processes make should run in parallel when running compile tasks.
# Note: For your decision you can get information about core and threads at your machine with this command: # NOTE: For your decision you can get information about core and threads at your machine with this command:
# ~ $ lscpu | grep -E '^Thread|^CPU\(' # ~ $ lscpu | grep -E '^Thread|^CPU\('
# See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=distro_codename#term-PARALLEL_MAKE
#PARALLEL_MAKE = "-j 8"
DISTRO = "tuxbox" ### Specifies the time (in seconds) after which to unload the BitBake server due to inactivity.
# Set BB_SERVER_TIMEOUT to determine how long the BitBake server stays resident between invocations.
# See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=distro_codename#term-BB_SERVER_TIMEOUT
#BB_SERVER_TIMEOUT = "20"
### SDK options
### System variables # See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=distro_codename#term-SDKMACHINE
# #SDKMACHINE = "i686"
DL_DIR = "${COREBASE}/yocto-downloads"
#DL_DIR = "${HOME}/Archive"
### sdk options
#
#SDKMACHINE ?= "i686"
SDKMACHINE = "x86_64" SDKMACHINE = "x86_64"
#SDKIMAGE_FEATURES="dev-pkgs dbg-pkgs src-pkgs " #SDKIMAGE_FEATURES="dev-pkgs dbg-pkgs src-pkgs "
### time zone ### time zone
#
DEFAULT_TIMEZONE = "Europe/Berlin" DEFAULT_TIMEZONE = "Europe/Berlin"
### Disk Space Monitoring during the build. Default disabled, but it's a good Idea to enable.
### base build and source directory # see: https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-BB_DISKMON_DIRS
#
YOCTO_BASEDIR = "${COREBASE}"
### Disk Space Monitoring during the build
#
BB_DISKMON_DIRS = "\ BB_DISKMON_DIRS = "\
STOPTASKS,${TMPDIR},1G,100K \ STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \ STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \ STOPTASKS,${SSTATE_DIR},500M,100K \
ABORT,${TMPDIR},100M,1K \ ABORT,${TMPDIR},100M,1K \
ABORT,${DL_DIR},100M,1K \ ABORT,${DL_DIR},100M,1K \
ABORT,${SSTATE_DIR},100M,1K" ABORT,${SSTATE_DIR},100M,1K \
"
### Hash Equivalence ### Hash Equivalence
#
# Enable support for automatically running a local hash equivalence server and # Enable support for automatically running a local hash equivalence server and
# instruct bitbake to use a hash equivalence aware signature generator. Hash # instruct bitbake to use a hash equivalence aware signature generator. Hash
# equivalence improves reuse of sstate by detecting when a given sstate # equivalence improves reuse of sstate by detecting when a given sstate
@@ -56,179 +48,71 @@ BB_DISKMON_DIRS = "\
# #
BB_HASHSERVE = "auto" BB_HASHSERVE = "auto"
BB_SIGNATURE_HANDLER = "OEEquivHash" BB_SIGNATURE_HANDLER = "OEEquivHash"
#
# https://docs.yoctoproject.org/ref-manual/variables.html#term-BB_DANGLINGAPPENDS_WARNONLY
BB_DANGLINGAPPENDS_WARNONLY = "1" BB_DANGLINGAPPENDS_WARNONLY = "1"
### Qemu configuration ### Qemu configuration
#
PACKAGECONFIG_pn-qemu-native = "sdl" PACKAGECONFIG_pn-qemu-native = "sdl"
CONF_VERSION = "1" ### Save disk space during build process.
# With rm_work enabled, this variable specifies that work directories should not be removed after build process.
# If this variable is activated, the memory requirement is significantly reduced.
# Defined exceptions are listed within variable RM_WORK_EXCLUDE.
# Comment out this entry, if you want to keep all built content within work directories.
# See: https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-rm-work
INHERIT += "rm_work"
# These targets are exluded from rm_work.
RM_WORK_EXCLUDE += "neutrino-image neutrino-webif neutrino-logos neutrino-feed-config openssl"
### Source download storage location (read/write)
# It's recommended outsourcing the download archive.
# See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=sdkimage_features#term-DL_DIR
#DL_DIR ?= "${COREBASE}/yocto-downloads"
DL_DIR = "${HOME}/Archive"
#WARN_QA = "fetch"
### Image settings ### Base directory of the OpenEmbedded build system used by build output and intermediate files (other than the shared state cache).
# Image size: # By default, the TMPDIR variable points to tmp within the build directory.
# possible are "small" or "normal" (normal means the same like empty string) # See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=sdkimage_features#term-TMPDIR
# #TMPDIR = "${TOPDIR}/tmp"
#IMAGESIZE = "normal"
#IMAGESIZE = "small"
#
# Which neutrino source will be used:
# Choose neutrino source. Possible values are "tuxbox", "tango" or "ni"
# Note: Successful build of foreign neutrino source is not guaranteed.
#
FLAVOUR = "tuxbox"
#
# Name of the image, default target name "neutrino-image"
#IMAGE_BASENAME = "neutrino-image"
IMAGE_BASENAME = "${SDK_NAME}"
#
# Image version tags:
# Allow usage of customized version tag within image file name. Default = "1" means: not allowed
# For default result: neutrino-image-hd51-20200926170603_ofgwrite.zip
INHIBIT_EXTENDED_IMAGE_VERSION = "1"
#
# For customized results:
#INHIBIT_EXTENDED_IMAGE_VERSION = "0"
# If INHIBIT_EXTENDED_IMAGE_VERSION = 0 then you can use the following options to create useful version labels for image files.
#
# Modify ${DISTRO_VERSION_NUMBER} for extended or custom version tag with what ever you want. This will be append a tag to the output file names, keep empty for nothing.
# sample result, without any effect: neutrino-image_hd51-20200926170603_usb.zip
#DISTRO_CUSTOM_VERSION = ""
#
# sample result: neutrino-image_hd51-20200926170603_v2020.39_usb.zip
#DISTRO_CUSTOM_VERSION = "2020.39"
#
# sample result with auto increment: neutrino-image_hd51-20200926170603_v20.0_usb.zip
# Result for next build will be: neutrino-image_hd51-20200926170603_v20.1_usb.zip
#DISTRO_CUSTOM_VERSION = "${IMAGE_YEARLY_TAG}.${IMAGE_BUILD_INCREMENT}"
#
# For user defined build increment you can generate manually (or how ever you want) a local increment file which cantains
# at the first line an increment number, other lines will be ignored.
# Sample result with local increment number '99' at the 1st line inside LOCAL_BUILD_INCREMENT_FILE: neutrino-image_hd51-20200926170603_v20.99_usb.zip
#LOCAL_BUILD_INCREMENT_FILE = "${HOME}/build/image_build_increment"
### base build and source directory
YOCTO_BASEDIR = "${COREBASE}"
### default image root password ### Some targets are using ccache. Here you can set the path for ccache store. Default it is located wthin the TMPDIR,
# set initial password for user root. Keep empty for root: # but it's recommended to set outside of the buildsystem into a shared directory
# # NOTE: ccache is not recommended for global usage by Yocto, but we have enabled this class only for some few recipes (eg. samba, neutrino).
ROOTPW = "" # According to current knowledge, there are no bad side effects for these recipes. On the contrary,
# this has proven to be helpful for these recipes.
# See: https://docs.yoctoproject.org/ref-manual/classes.html?highlight=ccache#ccache-bbclass
#CCACHE_TOP_DIR = "${TMPDIR}/ccache"
CCACHE_TOP_DIR = "${HOME}/.ccache"
### Where the OpenEmbedded build system place images, packages, SDKs, and other output files that are ready
# to be used outside of the build system.
# See also: https://docs.yoctoproject.org/ref-manual/variables.html#term-DEPLOY_DIR
# By default, this directory resides within the Build Directory as ${TMPDIR}/deploy.
# NOTE: Change this path only, if it is really needed for by your requirement!
#DEPLOY_DIR = "${TMPDIR}/deploy"
# Where to fo find the generated images.
#DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images"
# Where to fo find the generated packages. Only ipk's are supported by Neutrino package manager.
#DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk"
### Choose which plugins should be installed ### Directory for the shared state cache. By default, the SSTATE_DIR variable points to sstate-cache within the build directory as ${TOPDIR}/sstate-cache,
# # but it's a good idea to place it into a shared directory, so that this folder is always available in case the build folder should be deleted anyway or
PLUGIN_INSTALL += "msgbox tuxcom shellexec input tuxwetter" # you want to use sstate cache for other builds in future. It goes without saying that there is sufficient memory space available.
# NOTE: This directory is a very precious. Don't delete it lightly.
#SSTATE_DIR = "${TOPDIR}/sstate-cache"
SSTATE_DIR = "${HOME}/sstate-cache/${DISTRO_VERSION}"
### Tipp: use sstate mirrors
### Add Image Maintainer here
#
CREATOR = "${USER}"
KBUILD_BUILD_USER = "${CREATOR}"
KBUILD_BUILD_HOST = "blue"
### git configuration ... needed for etckeeper
#
GIT_USER = "root"
MAIL = "root@tuxbox-${MACHINE}"
### dev keys for neutrino gui
# NOTE: Here you see empty entries! NOT WORKING!
#
# You can also include a file eg. named "local.conf.devkeys.inc"
# and add these lines into your included file:
# include /<path>/<to>/local.conf.devkeys.inc
YT_DEV_KEY = ""
TMDB_DEV_KEY = ""
SHOUTCAST_DEV_KEY = ""
OMDB_API_KEY = ""
WEATHER_DEV_KEY = ""
### extra build config options for neutrino build
# e.g: to enable the neutrino test menu
#EXTRA_OECONF_append_pn-neutrino-mp = " \
# --enable-testing \
#"
#EXTRA_OECONF_append_pn-gdb = "--with-system-gdbinit=/etc/gdbinit"
### experimental kodi, qtwebflix
#DEPENDS_pn-neutrino-image += "kodi qtwebflix"
### package feed configuration
#
PACKAGE_CLASSES ?= "package_ipk"
#
### Update feeds
# Web server from which packages and images are updated. Points as default to this host
# URL-template (only local in this config file)
# for usage of these url's you should make a symlink as super user to the image and package directories
#
#UPDATE_SERVER_URL = "http://${KBUILD_BUILD_HOST}"
#UPDATE_SERVER_URL = "http://192.168.1.202"
#UPDATE_SERVER_URL = "http://localhost"
#UPDATE_SERVER_URL = "file:///var/www/html"
UPDATE_SERVER_URL = "https://update.tuxbox-neutrino.org"
### Package manager configuration
#
#IPK_FEED_SERVER = "file:///media/sda1/service/ipk"
# local feed if Tuxbox-Builder VM is in use
DISTRO_FEED_VERSION = "${DISTRO_VERSION_NUMBER}"
#DISTRO_FEED_VERSION = "3.2"
IPK_FEED_SERVER = "${UPDATE_SERVER_URL}/dist/${DISTRO_FEED_VERSION}/${MACHINE}/ipk"
### Image update configuration
# IMAGE_LOCATION = "file:////media/sda1/service/image/flashimage.img"
IMAGE_LOCATION = "${UPDATE_SERVER_URL}/dist/${DISTRO_FEED_VERSION}/${MACHINE}/images"
# RELEASE_TEXT_LOCATION = "file:///media/sda1/service/image/imageversion"
RELEASE_TEXT_LOCATION_HOST = "${DEPLOY_DIR_IMAGE}/beta.txt"
RELEASE_TEXT_LOCATION = "${UPDATE_SERVER_URL}/dist/${DISTRO_FEED_VERSION}/${MACHINE}/images/beta.txt"
#
#
# Image release state within release text, default = "0" (release), "1" (beta), 2 " (nightly)
# This will be set as suffix within image version file in entry imagedescription
#RELEASE_STATE = "0"
RELEASE_STATE = "1"
### Some additional lines for /etc/os-release and .version contents
#
OS_RELEASE_FIELDS_append = " HOME_URL SUPPORT_URL BUG_REPORT_URL BUILD_ID"
HOME_URL = "https://github.com/tuxbox-neutrino"
SUPPORT_URL = "https://wiki.tuxbox-neutrino.org"
BUG_REPORT_URL = "https://forum.tuxbox-neutrino.org"
### download mirrors
#
# PREMIRRORS_prepend = "\
# https://.*/.* https://archiv.tuxbox-neutrino.org/ \n \
# git://.*/.* http://www.yoctoproject.org/sources/ \n \
# ftp://.*/.* http://www.yoctoproject.org/sources/ \n \
# http://.*/.* http://www.yoctoproject.org/sources/ \n \
# https://.*/.* http://www.yoctoproject.org/sources/ \n \
# "
#see: https://wiki.yoctoproject.org/wiki/How_do_I#Q:_How_do_I_create_my_own_source_download_mirror_.3F
#
SOURCE_MIRROR_URL = "https://archiv.tuxbox-neutrino.org"
INHERIT += "own-mirrors"
BB_GENERATE_MIRROR_TARBALLS = "1"
#BB_NO_NETWORK = "1"
PREMIRRORS_prepend = "\
file://.*/.* file://${HOME}/Downloads/* \n"
### Tip: use sstate mirrors
#
# Speed up your complete new package build or after deleted tmp dir or sstate-cache and guard against fetcher failures. # Speed up your complete new package build or after deleted tmp dir or sstate-cache and guard against fetcher failures.
# Official mirrors to find here: http://sstate.yoctoproject.org/ # Official mirrors to find here: http://sstate.yoctoproject.org/
# Ensure you have a fast internet. After 1st build you can disable this # Ensure you have a fast internet. After 1st build you can disable this
# SSTATE_MIRRORS += "\ # See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=sdkimage_features#term-SSTATE_MIRRORS
#SSTATE_MIRRORS += "\
# file://.* http://sstate.yoctoproject.org/dev/PATH;downloadfilename=PATH \n \ # file://.* http://sstate.yoctoproject.org/dev/PATH;downloadfilename=PATH \n \
# file://.* http://sstate.yoctoproject.org/2.7.3/PATH;downloadfilename=PATH \n \ # file://.* http://sstate.yoctoproject.org/2.7.3/PATH;downloadfilename=PATH \n \
# file://.* http://sstate.yoctoproject.org/3.0.3/PATH;downloadfilename=PATH \n \ # file://.* http://sstate.yoctoproject.org/3.0.3/PATH;downloadfilename=PATH \n \
@@ -236,74 +120,321 @@ PREMIRRORS_prepend = "\
# file://.* http://sstate.yoctoproject.org/3.1.1/PATH;downloadfilename=PATH \n \ # file://.* http://sstate.yoctoproject.org/3.1.1/PATH;downloadfilename=PATH \n \
# file://.* http://sstate.yoctoproject.org/3.1.2/PATH;downloadfilename=PATH \n \ # file://.* http://sstate.yoctoproject.org/3.1.2/PATH;downloadfilename=PATH \n \
# file://.* http://sstate.yoctoproject.org/3.2/PATH;downloadfilename=PATH \n \ # file://.* http://sstate.yoctoproject.org/3.2/PATH;downloadfilename=PATH \n \
# file://.* http://sstate.yoctoproject.org/3.2.4/PATH;downloadfilename=PATH \n \
# " # "
#SSTATE_MIRRORS += "\
# file://.* http://sstate.yoctoproject.org/${DISTRO_VERSION}/PATH;downloadfilename=PATH \n \
#"
# This is our own stock of sstate cache related of last tuxbox builds. # This is our own stock of sstate cache related of last tuxbox builds.
SSTATE_MIRRORS = "\ SSTATE_MIRRORS += "\
file://.* https://sstate.tuxbox-upload.de/all/sstate-cache/PATH;downloadfilename=PATH \n \ file://.* https://n4k.sourceforge.io/sstate-cache/${DISTRO_VERSION}/sstate-cache/PATH;downloadfilename=PATH \n \
"
SSTATE_MIRRORS += "\
file://.* https://n4k.sourceforge.io/sstate-cache/devel/sstate-cache/PATH;downloadfilename=PATH \n \
" "
# If you are using the TuxboxBuilder VM and it's running, you can use its sstate cache related of last builds.
# NOTE: www server of Tuxbox-Builder VM must be enabled and configured so that it can be reached.
# If required, replace the server url with your own TuxboxBuilder server url
#SSTATE_MIRRORS += "\
# file://.* http://tuxbox-builder/sstate-cache/PATH;downloadfilename=PATH \n \
#"
### masked recipes # If you want to use any local sstate caches, you can add your own local directory.
# You should ensure directories are exist.
# These are samples for usage your own local sstate mirror (read only)
# SSTATE_MIRRORS += "\
# file://.* file:///${HOME}/sstate-cache/PATH;downloadfilename=PATH \n \
# "
# SSTATE_MIRRORS += "\
# file://.* file:///${HOME}/sstate-cache/3.2/PATH;downloadfilename=PATH \n \
# "
# SSTATE_MIRRORS += "\
# file://.* file:///${HOME}/sstate-cache/3.2.4/PATH;downloadfilename=PATH \n \
# "
### Image settings
# Image size:
# possible are "small" or "normal" (normal means the same like empty string)
IMAGESIZE = "normal"
#IMAGESIZE = "small"
### Set DISTRO
# NOTE: don't remove, it's required, but you can set an own name
DISTRO = "tuxbox"
### Which neutrino and libstb-hal sources will be used. Possible values are "tuxbox", "tango" or "ni"
# NOTE:
# This option is only to be understood as a relic from the early days of this meta layer
# and is therefore not necessarily maintained anymore. There is no guarantee that the build process
# for foreign sources will be successful.
# The more effective method would be to transfer the Neutrino and
# libstb-hal sources together into the workspace and use Git's functionality to integrate
# third-party repositories. So you are not be limited to few selected sources and can also use
# their branches and adapt the build process accordingly.
# Therefore, it must be expected that FLAVOUR option will soon be completely removed.
# See: https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html#modifying-an-existing-recipe
# and: https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html
#FLAVOUR = "tuxbox"
### Image filename arranging
# set a distro name if required
#DISTRO_NAME = "${DISTRO}"
### General image name
#IMAGE_BASENAME = "${DISTRO_NAME}"
IMAGE_BASENAME = "my-image"
### This variable controls the emission of warnings
# when GITPKGVTAG is used but no Git tags are found in the repository.
# By default, it is set to "0", which means warnings are enabled.
# Set this variable to "1" to suppress these warnings.
#GITPKGVTAG_NO_WARN_ON_NO_TAG = "1"
# Use this for a specific recipe:
#GITPKGVTAG_NO_WARN_ON_NO_TAG:pn-myrecipe = "1"
### Release distro type string
# Possible types as plain text are "beta", "release", "nightly", all others means what ever you want
DISTRO_TYPE = "beta"
#DISTRO_TYPE = "release"
#DISTRO_TYPE = "nightly"
# ...or what ever you want, e.g."
#DISTRO_TYPE = "private"
### Distro codename
# See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=distro_codename#term-DISTRO_CODENAME
#DISTRO_CODENAME = ""
### Distro version: required for version string within the .version file and defined image version
#DISTRO_VERSION_NUMBER_MAJOR = "3"
#DISTRO_VERSION_NUMBER_MINOR = "2"
#DISTRO_VERSION_NUMBER_MICRO = "4"
#DISTRO_VERSION_NUMBER_CYCLE = "${DISTRO_VERSION_NUMBER_MAJOR}${DISTRO_VERSION_NUMBER_MINOR}${DISTRO_VERSION_NUMBER_MICRO}"
#DISTRO_VERSION = "${DISTRO_VERSION_NUMBER_MAJOR}.${DISTRO_VERSION_NUMBER_MINOR}.${DISTRO_VERSION_NUMBER_MICRO}"
### Image name suffixes:
# See: https://docs.yoctoproject.org/ref-manual/variables.html#term-IMAGE_NAME
#IMAGE_VERSION_SUFFIX="-${DATETIME}"
### proposed samples:
#IMAGE_VERSION_SUFFIX="-${DISTRO_TYPE}"
#IMAGE_VERSION_SUFFIX="-${DATETIME}-${DISTRO_TYPE}"
#IMAGE_VERSION_SUFFIX="-${PR}"
#IMAGE_VERSION_SUFFIX="-${PR}-${DISTRO_TYPE}"
### Usage of ${DATE} is possible but not recommended, makes only sense for really once daily build.
#IMAGE_VERSION_SUFFIX="-${PR}.${DATE}"
#IMAGE_VERSION_SUFFIX="-${PR}.${DATE}-${DISTRO_TYPE}"
### For usage of ${META_VERSION}, uncomment the inherit line and the IMAGE_VERSION_SUFFIX line, to set the current git version of meta layer
# You can define an other meta-layer with variable META_NAME within the COREBASE directory.
#META_NAME = "meta-neutrino"
#inherit metaversion
#IMAGE_VERSION_SUFFIX=".${META_VERSION}"
### Set image name
# The name of the output image files minus the extension. This variable is derived using the IMAGE_BASENAME, MACHINE, and IMAGE_VERSION_SUFFIX variables:
# Default and origin by yocto its set to: IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
# We are using this as default image name:
#IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE_BRAND}-${MACHINE_NAME}-${DISTRO_VERSION}${IMAGE_VERSION_SUFFIX}"
### Update server configuration for update feeds and update server configuration
# Web server from which packages and images are updated. Points as default to the www directory of the host
# URL-template (only local in this config file)
# for usage of these url's you should make a symlink as super user to the image and package directories
# where do find the buildsystem the distro type file (beta.txt, release.txt ...), this file contains list of image urls for download
#RELEASE_TEXT_LOCATION_FILE = "${DEPLOY_DIR_IMAGE}/${DISTRO_TYPE}.txt"
### Server URL which contains update and packages, must contain the content of the deployed images and packages
# Web server must be running and html content must point to the toplevel directory which contains the deployed images
# NOTE: @hostname@ is only a placeholder and will be replaced with current hostname of your build host automatically. @hostname@ could be the current host IP too.
# or any other domain.tld. If required, replace @hostname@ with the host IP or Domain.
#UPDATE_SERVER_URL = "http://@hostname@"
## URL to the images, must contain the content of the image dir and its a sub dir to specific machine build and image dir which contains machine images
#IMAGE_LOCATION_URL = "${DIST_URL}/${DISTRO_VERSION}/${MACHINE}/images/${MACHINE}"
## URL to package feed
#IPK_FEED_SERVER ?= "${DIST_URL}/${DISTRO_VERSION}/${MACHINE}/ipk"
### Package type configuration
# See: https://docs.yoctoproject.org/ref-manual/variables.html#term-PACKAGE_CLASSES
# NOTE: Only ipk's are suported by Neutrino package manager.
PACKAGE_CLASSES = "package_ipk"
### Prevent splitting out debug information during packaging
# see: https://docs.yoctoproject.org/ref-manual/variables.html#term-INHIBIT_PACKAGE_DEBUG_SPLIT
#INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
### Add additional lines for /etc/os-release and .version contents
#HOME_URL = "https://github.com/tuxbox-neutrino"
#SUPPORT_URL = "https://wiki.tuxbox-neutrino.org"
#BUG_REPORT_URL = "https://forum.tuxbox-neutrino.org"
### Default image root password
# set initial password for user root. Keep empty for root:
ROOTPW = ""
### Add Image Maintainer and host build machine here
#CREATOR = "${USER}"
#KBUILD_BUILD_USER = "${CREATOR}"
KBUILD_BUILD_HOST = "127.0.0.1"
### Git configuration on target machine.
# To utilize Etckeeper and Neutrino plugins, Git is a prerequisite.
# Thus, configuring Git on the target machine is imperative.
# However, keep in mind that Etckeeper should not be pre-installed on
# the image as it would augment the image size and increase storage requirements
# during image creation. Therefore, it is recommended to install Etckeeper only
# after successfully flashing the image. However, for devices with limited storage
# space for the root filesystem, ensure that enough space is available for
# installing Etckeeper to avoid runtime errors.
# Furthermore, note that Git's databases can bloat over time,
# leading to unnecessarily large storage consumption. If Git is provided as an optional
# downloader in some plugins, it is advisable to avoid using it unless necessary.
# Use Git with caution.
GIT_USER = "root"
MAIL = "root@${MACHINE}"
### dev keys for neutrino gui and weather plugin
# NOTE: Here you see empty entries! NOT WORKING! Own keys are required!
# You can also include a file eg. named "local.conf.devkeys.inc"
# Modify and add these line:
# include /<path>/<to>/local.conf.devkeys.inc
## TMDB, OMDB, ShoutCast
TMDB_DEV_KEY = ""
OMDB_API_KEY = ""
SHOUTCAST_DEV_KEY = ""
## Weather
# NOTE: Beginning on March 31st, 2023 the Dark Sky API will not longer be available.
# WeatherKit, a new Apple API available on iOS, iPadOS, macOS, tvOS,
# and web that provides access to the new Apple Weather forecast data.
# The WEATHER_DEV_KEY variable is not longer used for darksky keys
# Currently used provider is: openweather map
WEATHER_DEV_KEY = ""
WEATHER_API_VERSION = "3.0"
# NOTE: YouTube functionality of Neutrino was completely removed in 2022, this key has no effects anymore, but YouTube is usable further with plugins.
YT_DEV_KEY = ""
## EXTRA_OECONF modifications for Neutrino.
# NOTE! For global use within build-system see: https://docs.yoctoproject.org/ref-manual/variables.html#term-EXTRA_OECONF
## Extra build config options for neutrino build
# eg: to enable the neutrino test menu.
# NOTE! --enable-testing Works only with FLAVOUR = "tuxbox".
# If you want to use a different FLAVOUR than 'tuxbox', keep these lines uncommented and
# add them to your local.conf within your build directory.
#EXTRA_OECONF_append_pn-neutrino += " \
# --enable-testing \
#"
## Uncomment these lines to disable debug mode for Neutrino.
#EXTRA_OECONF_append_pn-neutrino += " \
# --without-debug \
#"
## Uncomment these lines to enable API-management via Neutrino.
# EXTRA_OECONF_append_pn-neutrino += " \
# --enable-tmdb-key-manage \
# --enable-omdb-key-manage \
# --enable-youtube-key-manage \
# --enable-shoutcast-id-manage \
# --enable-weather-key-manage \
# "
### Extra build config options for gdb build
#EXTRA_OECONF_append_pn-gdb = "--with-system-gdbinit=/etc/gdbinit"
### Experimental kodi, qtwebflix
# NOTE: will build only with gatesgarth/3.2.4
# It's not guaranteed, that build will be successfully.
# Alternatively, you can add targets to EXTRA IMAGE DEPENDS or IMAGE_INSTALL.
#
#DEPENDS_pn-neutrino-image += "kodi qtwebflix"
### URLs for download mirrors from Yocto or our own stock
# global archive and source urls
ARCHIVE_SOURCE_URL = "https://n4k.sourceforge.io/archive/Archive"
YOCTO_SOURCE_URL = "http://www.yoctoproject.org/sources"
PREMIRRORS_prepend = "\
https://.*/.* ${ARCHIVE_SOURCE_URL}/ \n \
git://.*/.* ${YOCTO_SOURCE_URL}/ \n \
ftp://.*/.* ${YOCTO_SOURCE_URL}/ \n \
http://.*/.* ${YOCTO_SOURCE_URL}/ \n \
https://.*/.* ${YOCTO_SOURCE_URL}/ \n \
"
### Download mirrors from Local file mirrors (read only)
#PREMIRRORS_prepend = "\
# file://.*/.* file://${HOME}/Downloads/* \n \
# "
### Source mirror urls
# see: https://wiki.yoctoproject.org/wiki/How_do_I#Q:_How_do_I_create_my_own_source_download_mirror_.3F
# This is our own stock of archives, those are created by our image builds.
SOURCE_MIRROR_URL = "${ARCHIVE_SOURCE_URL}"
INHERIT += "own-mirrors"
BB_GENERATE_MIRROR_TARBALLS = "0"
#BB_NO_NETWORK = "1"
### Masked recipes
# This will ignore recipes to build. # This will ignore recipes to build.
# NOTE: Some masked targets with related depends could break the build. # NOTE: Some masked targets with related depends could break the build.
# BBMASK += "/meta-neutrino/recipes-qt/qt5" #BBMASK += "/meta-neutrino/recipes-qt/qt5"
### Build packages but do not install packages into root filesystem/image ### Build packages but do not install packages into image
# https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-EXTRA_IMAGEDEPENDS # https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-EXTRA_IMAGEDEPENDS
EXTRA_IMAGEDEPENDS += " samba " #EXTRA_IMAGEDEPENDS += " \
# gdb \
# These entries replace default installed entries which are contained in ./meta-neutrino/recipes-images/images/neutrino-image-base.inc. # samba \
# You can add more entries with variable IMAGE_INSTALL_append see below...
#
# IMAGE_INSTALL += " \
# vsftpd \ # vsftpd \
# " # "
# IMAGE_INSTALL = " \ #EXTRA_IMAGEDEPENDS += " \
# autofs \ # kodi \
# ca-certificates \
# curl \
# dosfstools \
# e2fsprogs \
# e2fsprogs-resize2fs \
# findutils \
# gptfdisk \
# hdparm \
# ifupdown \
# less \
# libswscale \
# libusb1 \
# minidlna \
# nano \
# nfs-utils \
# nfs-utils-client \
# ntpdate \
# ofgwrite \
# openssh \
# openssl \
# opkg \
# pv \
# rpcbind \
# rsync \
# samsunglcd4linux \
# tar \
# tzdata \
# tzdata-europe \
# udev-extraconf \
# udpxy \
# util-linux-blkid \
# util-linux-mount \
# util-linux-swaponoff \
# util-linux-umount \
# virtual/screengrabber \
# virtual/neutrino \
# neutrino-plugins \
# neutrino-lua-plugins \
# neutrino-plugin-mediathek \
# xupnpd \
# zip \
# " # "
# Put additional packages that should be packaged into your image. Separated with a whitespace. or use IMAGE_INSTALL += ... ### Put additional packages that should be packaged into your image. Separated with a whitespace. or use IMAGE_INSTALL += ...
# # https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-IMAGE_INSTALL
# IMAGE_INSTALL_append = " gdb-dbg glibc-dbg glibc-thread-db qtwebflix webmin" # See: ./meta-neutrino/recipes-images/images/neutrino-image-base.inc.
# IMAGE_INSTALL_append = " gdb-dbg glibc-dbg glibc-thread-db webmin" IMAGE_INSTALL += " \
stb-flash \
msgbox \
shellexec \
tuxcom \
input \
"
#IMAGE_INSTALL += " \
# webmin \
#"
# IMAGE_INSTALL += " \
# neutrino-3rd-party-themes \
#"
# IMAGE_INSTALL += " qtwebflix"
# IMAGE_INSTALL += " gdb-dbg glibc-dbg glibc-thread-db"
### Examples to ...
# ... remove already contained packages from IMAGE_INSTALL use this:
#I MAGE_INSTALL_remove += " \
# <target1> \
# <target2> \
# "
### ... build packages without install into image use PACKAGE_EXCLUDE
# see: https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-PACKAGE_EXCLUDE
# PACKAGE_EXCLUDE += \
# <package1> \
# <package2> \
#"
### ... replace a source url via local.conf
# SRC_URI_pn-x264 = "git://code.videolan.org/videolan/x264;branch=stable;protocol=https \
# "
### base-files rewrite
#LICENSE_pn-base-files = "CLOSED"
#LIC_FILES_CHKSUM_pn-base-files = ""
#BBMASK += "/meta-neutrino/recipes-images/base-files/base-files_%.bbappend"
#FILESEXTRAPATHS_prepend := "${HOME}/devel/local-yocto-files/base-files:"
### Enabling and Disabling Build History
# see> https://docs.yoctoproject.org/singleindex.html#enabling-and-disabling-build-history
#INHERIT += "buildhistory"
#BUILDHISTORY_COMMIT = "1"
### Replace some lame fetch urls
#BINUTILS_GIT_URI = "git://github.com/bminor/binutils-gdb.git;branch=${BRANCH};protocol=https"
#GLIBC_GIT_URI = "git://github.com/bminor/glibc.git;branch=release/2.32/master;name=glibc"

10
translate-md-config.json Normal file
View File

@@ -0,0 +1,10 @@
{
"template_md": "template.md",
"output_dir": ".",
"prefix": "README_",
"main_doc": "README.md",
"target_languages": {
"de": ["German", "🇩🇪"],
"en": ["English", "🇬🇧"]
}
}