mirror of
https://github.com/tuxbox-neutrino/buildenv.git
synced 2025-08-26 23:13:18 +02:00
Compare commits
130 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ef4dbbcaae | ||
|
b8c0feefda | ||
|
1fd7cb62fc | ||
|
061053c7b5 | ||
|
d84f277098 | ||
|
2d26cc0775 | ||
|
116cc557dc | ||
|
1ff67985ec | ||
|
889b4b9746 | ||
|
0ecffb58dd | ||
|
1528ca7279 | ||
|
6bc2f1b7f9 | ||
|
48ec25e2e4 | ||
|
6d4ae33a0e | ||
|
7961947fa9 | ||
|
0c17141c15 | ||
|
1488d7f07a | ||
|
0acb4f2bcb | ||
|
2f12b0e953 | ||
|
b220b0804f | ||
|
3c9c730ef5 | ||
|
b85a65968f | ||
|
495bd574c1 | ||
|
fd2fec8550 | ||
|
3e510b0f91 | ||
|
e915e9a3af | ||
|
e207b2f214 | ||
|
bd4394002a | ||
|
dc119f2cab | ||
|
f058f2dc4f | ||
|
f610523694 | ||
|
a8123d868a | ||
|
1c8c28d6fe | ||
|
e5e068c9c6 | ||
|
5a6564cfa1 | ||
|
17c788f0b6 | ||
|
2528ed229f | ||
|
b4102b8629 | ||
|
f81a5a4f4c | ||
|
1ab259dc19 | ||
|
36fa4881ac | ||
|
035d55be1e | ||
|
a02717be46 | ||
|
fd6946add0 | ||
|
8db6d9ff5a | ||
|
1c2ea27e48 | ||
|
7364c023f3 | ||
|
be593b9280 | ||
|
cdc0a66024 | ||
|
1fab14c1b1 | ||
|
7cc95f244c | ||
|
c99b2c81a5 | ||
|
7192612c65 | ||
|
118bf41374 | ||
|
f6013c24f8 | ||
|
af32875a90 | ||
|
a57049b8ff | ||
|
eb6fa9c3af | ||
|
aa1967149f | ||
|
7d64ca76ea | ||
|
33e5895b69 | ||
|
3ece5019d6 | ||
|
6f9a3e5d5f | ||
|
b67b6179a0 | ||
|
b2bc94cc85 | ||
|
083bad396c | ||
|
512fd26b8c | ||
|
06dc131957 | ||
|
417adaae42 | ||
|
8853288746 | ||
|
d0b46d9d66 | ||
|
b3bf207181 | ||
|
60951020ac | ||
|
3274d534f4 | ||
|
91e99de80c | ||
|
84e8e7f4b3 | ||
|
bba6f1757a | ||
|
3357c695e8 | ||
|
53c1eff2d9 | ||
|
635dcea62b | ||
|
e6adc400ae | ||
|
5a69bca0b3 | ||
|
81e94378da | ||
|
6c12b84daa | ||
|
f0a324cf8c | ||
|
e843103372 | ||
|
c3e5a8c69c | ||
|
0036b959aa | ||
|
21060d3016 | ||
|
93eac578c8 | ||
|
56a6509346 | ||
|
6c4dace716 | ||
|
5e06dceea8 | ||
|
5e68f8ae32 | ||
|
e7dfb1bad8 | ||
|
d84ba263a0 | ||
|
6ff644d8a5 | ||
|
2a8d426461 | ||
|
cd5b0f29ff | ||
|
078cd35de1 | ||
|
4264e706f7 | ||
|
7de2d09c94 | ||
|
fe0fc188cf | ||
|
8282272189 | ||
|
acc4c14a11 | ||
|
97f20986cb | ||
|
4ce9986d03 | ||
|
803697a20c | ||
|
eeec3fae0c | ||
|
bd83cbb8c1 | ||
|
409a9cc2e0 | ||
|
6e9868d181 | ||
|
ca0fe8f903 | ||
|
4eed1f45bf | ||
|
adf32c85ae | ||
|
09538c7a69 | ||
|
eacce3ecf2 | ||
|
be25daedbc | ||
|
315975d540 | ||
|
88d708c4fe | ||
|
82a5d7a1b4 | ||
|
1582a34f8b | ||
|
5c3b8c35c8 | ||
|
5841847489 | ||
|
85370e135d | ||
|
b9718c4352 | ||
|
acd579ae31 | ||
|
ab35dab3e2 | ||
|
2258e9a89a | ||
|
5c67c090ea |
87
.github/workflows/translateandtag.yml
vendored
Normal file
87
.github/workflows/translateandtag.yml
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
# name: Translate README
|
||||
|
||||
# on:
|
||||
# push:
|
||||
# branches:
|
||||
# - master
|
||||
# paths:
|
||||
# - 'README.md'
|
||||
# - 'README_de.md'
|
||||
# - 'init.sh'
|
||||
# - 'init.functions.sh'
|
||||
# - 'files/**'
|
||||
# - 'local.conf.common.inc.sample'
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
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
|
11
.gitignore
vendored
11
.gitignore
vendored
@@ -9,6 +9,17 @@ build-neutrino
|
||||
local.conf.common.inc
|
||||
dist/*
|
||||
build*
|
||||
backups*
|
||||
*.orig
|
||||
*.log
|
||||
local build increment
|
||||
*.list
|
||||
|
||||
*/poky
|
||||
poky-*
|
||||
|
||||
venv
|
||||
tagit.py
|
||||
tagit-config.json
|
||||
translate-md.py
|
||||
|
||||
|
159
README.md
159
README.md
@@ -1,156 +1,9 @@
|
||||
# Quick start image build #
|
||||
# Documentation
|
||||
|
||||
## Preparation
|
||||
NOTE: If you are using the Tuxbox-Builder VM please jump to step 1. The Tuxbox-Builder VM already contains required packages.
|
||||
For details and download of Tuxbox-Builder VM see: https://sourceforge.net/projects/n4k/files/Tuxbox-Builder
|
||||
This document is available in the following languages:
|
||||
|
||||
### Install required packages (Debian 9/10)
|
||||
```bash
|
||||
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
|
||||
```
|
||||
Also required is sdl.
|
||||
```bash
|
||||
apt-get install -y libsdl1.2-dev
|
||||
```
|
||||
For newer image versions with dunfell (3.1) or later use libsdl2-dev instead libsdl1.2-dev
|
||||
```bash
|
||||
apt-get install -y libsdl2-dev
|
||||
```
|
||||
<!-- LANGUAGE_LINKS_START -->
|
||||
[🇩🇪 German](README_de.md) | [🇬🇧 English](README_en.md)
|
||||
<!-- LANGUAGE_LINKS_END -->
|
||||
|
||||
### Recommended additional packages:
|
||||
```bash
|
||||
apt-get install -y gitk git-gui meld
|
||||
```
|
||||
NOTE: 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:
|
||||
|
||||
https://www.yoctoproject.org/docs/3.0.3/brief-yoctoprojectqs/brief-yoctoprojectqs.html
|
||||
|
||||
## 1. Clone init script into a directory of your choice
|
||||
```bash
|
||||
$:~ git clone https://github.com/Tuxbox-Project/build.git
|
||||
```
|
||||
|
||||
## 2. Change to the generated directory
|
||||
```bash
|
||||
$:~ cd build
|
||||
```
|
||||
|
||||
## 3. Execute init script
|
||||
This will clone all required layers and moves some config files into your build directory.
|
||||
* Parameter 1: Machine type can be h7, hd51, hd60, hd61, osmio4k, osmio4kplus or set 'all' or keep empty '' for all machines.
|
||||
* Parameter 2: Image version can be 3.0, 3.1, 3.2 or keep empty for latest version (recommended, because of older versions are not really maintained anymore)
|
||||
```bash
|
||||
$:~ ./init.sh <machine> <image-version>
|
||||
```
|
||||
|
||||
## 4. Switch to poky directory
|
||||
After sccessfull executed init script you will find a subdirectory like poky-3.x .
|
||||
Now switch to this directory e.g.:
|
||||
```bash
|
||||
$:~ cd poky-3.2
|
||||
```
|
||||
|
||||
## 5. Execute environment script
|
||||
Please use possible machine type which you selected (see step 3)! Here as example we use hd51.
|
||||
This creates (if not exists!) the build directory named as hd51 (default name ist build) and sets the build environment.
|
||||
```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
|
||||
$ . ./oe-init-build-env hd51
|
||||
```
|
||||
NOTE: If you left the build directory you must retry step 5 for your machine type to recreate the required environment.
|
||||
|
||||
## 6. Build image
|
||||
After step 5 you are ready to build an image.
|
||||
```bash
|
||||
$:~ /build/poky-3.0/<machine>$ bitbake neutrino-image
|
||||
```
|
||||
This may take a while. Some warn messages can be ignored and 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 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>/
|
||||
```
|
||||
|
||||
## Update the meta layer repositories
|
||||
Execution of init script will update the meta layers. Of corse you can update your meta-layer repositories manually.
|
||||
|
||||
Note: Your config files will be untouched. New or adapted config options are not considered. Please check your configuration if required.
|
||||
|
||||
|
||||
## Reset configuration
|
||||
If you want to reset your configs, please rename (delete is not recommended) the conf directory 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.
|
||||
|
||||
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 3), 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
|
||||
Please choose your preferred language by clicking on the links above.
|
370
README_de.md
Normal file
370
README_de.md
Normal file
@@ -0,0 +1,370 @@
|
||||
<!-- 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.4.1 Struktur der Buildumgebung](#141-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.4.1 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 der Maschinen- 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 von Targets von Bitbake automatisch angelegt
|
||||
│ └── (workspace) <-- Workspace, wird automatisch beim Ausführen von ```devtool modify``` angelegt
|
||||
:
|
||||
└── <machine y> <-- weiteres Build-Unterverzeichnis für Maschinentyp y
|
||||
```
|
||||
|
||||
## 2. Image bauen
|
||||
|
||||
Stelle sicher, dass Du dich wie im [Schema](#141-struktur-der-buildumgebung) gezeigt im ```poky```-Verzeichnis befindest:
|
||||
|
||||
```
|
||||
poky-{DISTRO_VERSION}
|
||||
```
|
||||
|
||||
### 2.1 Box wählen
|
||||
|
||||
Liste verfügbarer Geräte anzeigen lassen:
|
||||
|
||||
```bash
|
||||
ls build
|
||||
<machine> <machine1> <machine2> <machine3>...
|
||||
```
|
||||
**Hinweis:** Die hier ausgegebenen Typen können gebaut werden und müssen bei den folgenden Schritten genauso angegeben werden, also möglichts nicht vertippen!
|
||||
|
||||
|
||||
### 2.2 Starte Umgebungsskript
|
||||
|
||||
Führe das Umgebungsskript für genau **eine** 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 mit [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
|
||||
```
|
||||
|
||||
Dieser Befehl baut nun das komplette Image mit allen dazu gehörenden Paketen und auch den Paketen, die je nach Konfiguration extra gebaut werden oder nur gabaut aber nicht ins Image installiert werden sollen. 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
374
README_en.md
Normal 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 use Neutrino as their user interface on different hardware platforms. It automates several of the steps needed to create a consistent, functional development and build environment by pre‑installing the necessary dependencies, basic configurations, and meta‑layers, while still letting you add custom settings. The script aims to give you a solid base on which you can build and experiment in order to create, update, and maintain your own customised 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 GUI support and analysis](#111-recommended-additional-packages-for-gui-support-and-analysis)
|
||||
* [1.2 Prepare Git (if necessary)](#12-prepare-git-if-necessary)
|
||||
* [1.3 Clone the init script](#13-clone-the-init-script)
|
||||
* [1.4 Run the init script](#14-run-the-init-script)
|
||||
* [1.4.1 Structure of the build environment](#141-structure-of-the-build-environment)
|
||||
* [2. Build an image](#2-build-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. Updating](#3-updating)
|
||||
|
||||
* [3.1 Update an image](#31-update-an-image)
|
||||
* [3.2 Update a package](#32-update-a-package)
|
||||
* [3.3 Update meta‑layer repositories](#33-update-meta-layer-repositories)
|
||||
* [4. Customisation](#4-customisation)
|
||||
|
||||
* [4.1 Configuration](#41-configuration)
|
||||
|
||||
* [4.1.1 Configuration files](#411-configuration-files)
|
||||
* [4.1.2 bblayers.conf](#412-bblayersconf)
|
||||
* [4.1.3 Reset configuration](#413-reset-configuration)
|
||||
* [4.3 Recipes](#43-recipes)
|
||||
* [4.4 Packages](#44-packages)
|
||||
|
||||
* [4.4.1 Edit source code in the workspace (example)](#441-edit-source-code-in-the-workspace-example)
|
||||
* [5. Force a rebuild of a single package](#5-force-a-rebuild-of-a-single-package)
|
||||
* [6. Force a complete image build](#6-force-a-complete-image-build)
|
||||
* [7. Licence](#7-licence)
|
||||
* [8. Further information](#8-further-information)
|
||||
|
||||
## 1. Preparation
|
||||
|
||||
It is recommended to use the dedicated Docker container, because it already covers the essential steps so that you can start with as few adjustments to your host system as possible. See [docker-buildenv](https://github.com/tuxbox-neutrino/docker-buildenv). In that case you can jump straight to [initialisation](#14-run-the-init-script).
|
||||
|
||||
**NOTE:** [docker-buildenv](https://github.com/tuxbox-neutrino/docker-buildenv) completely replaces the [Tuxbox‑Builder](https://sourceforge.net/projects/n4k/files/Tuxbox-Builder) VM, which is no longer maintained.
|
||||
|
||||
The paths given here are based on defaults created by the init script. Some entries are shown as `<placeholder>` and have to be adapted locally. See [schema](#14-run-the-init-script).
|
||||
|
||||
### 1.1 Install required host packages
|
||||
|
||||
**Note:** When 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 GUI 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 do not yet have a configured Git installation, please set up your global Git user data, otherwise you will repeatedly see warnings while the script is running.
|
||||
|
||||
```bash
|
||||
git config --global user.email "you@example.com"
|
||||
git config --global user.name "Your Name"
|
||||
```
|
||||
|
||||
### 1.3 Clone the init script
|
||||
|
||||
```bash
|
||||
git clone https://github.com/tuxbox-neutrino/buildenv.git && cd buildenv
|
||||
```
|
||||
|
||||
### 1.4 Run the init script
|
||||
|
||||
```bash
|
||||
./init && cd poky-3.2.4
|
||||
```
|
||||
|
||||
### 1.4.1 Structure of the build environment
|
||||
|
||||
After [step 1.4](#14-run-the-init-script) your directory tree should look roughly like this:
|
||||
|
||||
````
|
||||
.buildenv
|
||||
├── dist <-- Public folder for your HTTP server (if configured) http://localhost or http://localhost:8080; required for IPK feeds and images
|
||||
│ └── {DISTRO_VERSION} <-- generated images and packages live here (symlinks point to the deploy directories inside the build sub‑directories)
|
||||
:
|
||||
├── init.sh <-- the init script
|
||||
├── local.conf.common.inc <-- global user configuration, included by the per‑machine configuration
|
||||
:
|
||||
├── log <-- log folder, contains a log for every run of the init script
|
||||
:
|
||||
└── poky-{DISTRO_VERSION} <-- after step 1.4 you are here. This contains the build system core and the meta‑layers
|
||||
│
|
||||
:
|
||||
└── build <-- build sub‑directories live here; after step 2.2 you are inside one of the machine build sub‑directories
|
||||
├── <machine x> <-- build sub‑directory for machine type x
|
||||
│ ├── conf <-- configuration folder for layers and user settings
|
||||
│ │ ├── bblayers.conf <-- configuration file for the meta‑layers
|
||||
│ │ └── local.conf <-- user configuration for this machine type
|
||||
│ :
|
||||
│ ├── (tmp) <-- working directory automatically created by BitBake when building targets
|
||||
│ └── (workspace) <-- workspace automatically created by ```devtool modify```
|
||||
:
|
||||
└── <machine y> <-- another build sub‑directory for machine type y
|
||||
````
|
||||
|
||||
## 2. Build an image
|
||||
|
||||
Make sure you are inside the `poky` directory as shown in the [schema](#141-structure-of-the-build-environment):
|
||||
|
||||
```
|
||||
poky-{DISTRO_VERSION}
|
||||
```
|
||||
|
||||
### 2.1 Choose a box
|
||||
|
||||
Show list of available devices:
|
||||
|
||||
```bash
|
||||
ls build
|
||||
<machine> <machine1> <machine2> <machine3>...
|
||||
```
|
||||
|
||||
**Note:** Only the machine types shown here can be built. Use exactly the names printed here in the following steps—typos will break things!
|
||||
|
||||
### 2.2 Start the environment script
|
||||
|
||||
Run the environment script **once** for exactly **one** box from the list. You will automatically end up in the corresponding build sub‑directory.
|
||||
|
||||
```bash
|
||||
. ./oe-init-build-env build/<machine>
|
||||
```
|
||||
|
||||
As long as you stay inside the created environment within the open shell and inside the desired build sub‑directory, you do not have to run this script again and can build images or any packages via [step 2.3](#23-create-the-image).
|
||||
|
||||
**Note:** You can open additional shells and therefore additional build environments for other box types in parallel. Simply switch to the terminal you need; parallel builds are possible if your system is powerful enough.
|
||||
|
||||
### 2.3 Create the image
|
||||
|
||||
```bash
|
||||
bitbake neutrino-image
|
||||
```
|
||||
|
||||
This command builds the complete image with all the packages belonging to it, including packages that, depending on your configuration, are built but not installed into the image. This can take a while. Some warnings can be ignored. Errors in the setscene tasks are no problem, but any errors during build or package tasks usually abort the process. [Please report errors or share your solution](https://forum.tuxbox-neutrino.org/forum/viewforum.php?f=77). Help is always welcome.
|
||||
|
||||
If everything finishes, you should see a message similar to:
|
||||
|
||||
```bash
|
||||
"NOTE: Tasks Summary: Attempted 4568 tasks of which 4198 didn't need to be rerun and all succeeded."
|
||||
```
|
||||
|
||||
<span style="color: green;">That's it …</span>
|
||||
|
||||
You will find the results under:
|
||||
|
||||
```bash
|
||||
buildenv/poky-{DISTRO_VERSION}/build/<machine>/tmp/deploy
|
||||
```
|
||||
|
||||
or in the public directory:
|
||||
|
||||
```bash
|
||||
buildenv/dist/<Image-Version>/<machine>/
|
||||
```
|
||||
|
||||
If a web server is configured that points to the public directory:
|
||||
|
||||
```bash
|
||||
http://localhost/{DISTRO_VERSION} or, with port number, http://localhost:8080/{DISTRO_VERSION}
|
||||
```
|
||||
|
||||
## 3. Updating
|
||||
|
||||
You do not need to update packages manually. BitBake does this automatically whenever a target is built, including its 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 necessary, BitBake will simply skip the builds.
|
||||
|
||||
### 3.1 Update an image
|
||||
|
||||
```bash
|
||||
bitbake neutrino-image
|
||||
```
|
||||
|
||||
### 3.2 Update a package
|
||||
|
||||
```bash
|
||||
bitbake <package>
|
||||
```
|
||||
|
||||
### 3.3 Update meta‑layer repositories
|
||||
|
||||
Running the init script with the `--update` parameter upgrades the included meta‑layers to the state of their remote repositories.
|
||||
|
||||
```bash
|
||||
./init --update
|
||||
```
|
||||
|
||||
If you have modified the meta‑layers, the update routines invoked by the init script should temporarily stash or rebase your uncommitted changes onto the local repository. Of course you can update your local meta‑layers (meta‑neutrino and machine layers) manually. Conflicts must always be resolved manually.
|
||||
|
||||
**Note:** Configuration files remain largely untouched, but variable names may be migrated. New or changed settings are not altered. Please check your configuration if necessary.
|
||||
|
||||
## 4. Customisation
|
||||
|
||||
### 4.1 Configuration
|
||||
|
||||
It is recommended to do the first build without modified configuration files so you get a feel for the build process and can see results quickly.
|
||||
The number of possible settings is huge and not really easy to grasp for beginners. OpenEmbedded, and especially the Yocto Project, is however very well documented and is the best source of information.
|
||||
|
||||
#### 4.1.1 Configuration files
|
||||
|
||||
> \~/buildenv/poky-3.2.4/build/`<machine>`/conf/local.conf
|
||||
|
||||
This file resides in the build directory of each machine type and is the actual user configuration file originally intended by the build system. In this environment, however, this `local.conf` contains only a few lines and includes a global configuration. This file is **only** valid for the machine type it belongs to. Therefore you can add entries here that should apply only to that machine type. See the [schema](#14-run-the-init-script).
|
||||
|
||||
> \~/buildenv/local.conf.common.inc
|
||||
|
||||
This file contains settings that apply to all machine types and is generated on the first run of the init script from the template `~/buildenv/local.conf.common.inc.sample`.
|
||||
|
||||
You *could* use the build‑system‑provided `./build/<machine>/conf/local.conf` as the primary configuration file for every machine type separately, but that would increase maintenance effort. Therefore `~/buildenv/local.conf.common.inc` is just included by `./build/<machine>/conf/local.conf`.
|
||||
|
||||
**Note on** `~/buildenv/local.conf.common.inc.sample`**:** This is only a template and should remain untouched to avoid conflicts when updating the build‑script repository and to see what might have changed.
|
||||
|
||||
After an update of the build‑script repository, new or changed options may have been added or removed that are not present in the included configuration file. Keep this in mind and check and adjust your configuration if needed.
|
||||
|
||||
#### 4.1.2 bblayers.conf
|
||||
|
||||
> \~/buildenv/poky-3.2.4/build/`<machine>`/conf/bblayers.conf
|
||||
|
||||
This file is normally adjusted on the first run of the init script and usually needs to be changed only if you want to add, remove or replace layers.
|
||||
|
||||
#### 4.1.3 Reset configuration
|
||||
|
||||
If you want to reset your machine configurations, rename the `conf` directory (deleting is not recommended) and run the init script again.
|
||||
|
||||
```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
|
||||
|
||||
**Unless you are directly involved in developing the Poky layers, do not modify the official Poky meta‑layers! The Yocto Project explicitly advises against this, because you risk losing all your work during updates and creating incompatibilities or conflicts that are hard to maintain. The usual approach to complete, extend or override existing official recipes is the use of [.bbappend files](https://docs.yoctoproject.org/3.2.4/dev-manual/dev-manual-common-tasks.html#using-bbappend-files-in-your-layer).**
|
||||
|
||||
Alternatively—although also not really recommended—you could copy official recipes into your own meta‑layers and adjust them; the build system will typically prefer these copies. In that case, however, you are responsible for keeping those recipes up to date, which can unnecessarily increase maintenance effort.
|
||||
|
||||
The same principle applies to recipes from your own meta‑layers such as `meta-neutrino` or the machine layers. Anyone who [actively wants to work on the recipes](https://docs.yoctoproject.org/current/ref-manual/devtool-reference.html#modifying-an-existing-recipe) is of course welcome to do so.
|
||||
|
||||
### 4.4 Packages
|
||||
|
||||
If you want full control over a package’s source code—e.g. to fix something or to develop actively—you should move the source you want to work on into the workspace. See the [Neutrino example](#441-edit-source-code-in-the-workspace-example).
|
||||
|
||||
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 you are guaranteed that the build system will not touch the source code. If you ignore this, modified source code might be deleted or overwritten over and over again. Your changes could therefore be lost or become incompatible. In the default local configuration, [rm\_work](https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-rm-work) is enabled, which cleans up each package’s work directory after every successful build, so that nothing but a few logs remains.
|
||||
|
||||
#### 4.4.1 Edit source code in the workspace (example)
|
||||
|
||||
Neutrino is used as an example here, but the workflow is essentially the same for any other package.
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
You will now find the Neutrino source code under `/buildenv/poky-3.2.4/build/hd61/workspace/sources/neutrino`. You can work on it there. This means that the build system will no longer clone or automatically update the Neutrino sources from the remote Git repo on its own, but will from now on only use the local sources inside the workspace, which you maintain yourself. It is a Git repo created by devtool; you can link it to the original remote repository if that has not already been done.
|
||||
|
||||
If you now run:
|
||||
|
||||
```bash
|
||||
bitbake neutrino
|
||||
```
|
||||
|
||||
…Neutrino will from now on be built only from the local repo in the workspace:
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
**Note!** In the specific case of Neutrino it is advisable to move not only its source code but also the associated `libstb-hal` into the workspace.
|
||||
|
||||
```bash
|
||||
devtool modify libstb-hal
|
||||
```
|
||||
|
||||
## 5. Force a rebuild of a single package
|
||||
|
||||
In some cases a target may abort for whatever reason. There is no need to panic and wipe your working directory and the expensive sstate‑cache. You can perform clean‑ups for every target individually without destroying an otherwise working system.
|
||||
|
||||
Broken archive URLs in particular can lead to aborts. These errors are always displayed and you can check the URLs. Often it is just temporary server issues and works again after a few minutes.
|
||||
|
||||
To make sure that the recipe in question actually has a problem it is sensible to clean the target completely and build it again. To do this you must clean all package, build and cached data belonging to that target.
|
||||
|
||||
```bash
|
||||
bitbake -c cleansstate <target>
|
||||
```
|
||||
|
||||
then rebuild:
|
||||
|
||||
```bash
|
||||
bitbake <target>
|
||||
```
|
||||
|
||||
## 6. Force a complete image build
|
||||
|
||||
The init script provides the `--reset` option for this.
|
||||
|
||||
```bash
|
||||
./init --reset
|
||||
# Follow instructions
|
||||
```
|
||||
|
||||
You can achieve the same manually by renaming the `tmp` directory in the respective build sub‑directory. You can delete it later if you want to free disk space or are sure you no longer need it:
|
||||
|
||||
```bash
|
||||
mv tmp tmp.01
|
||||
```
|
||||
|
||||
Then build the image again:
|
||||
|
||||
```bash
|
||||
bitbake neutrino-image
|
||||
```
|
||||
|
||||
If you did **not** delete the cache, the image should be built in a relatively short time. For that reason you are encouraged to keep the cache. The directory where the cache is located is controlled by the variable `${SSTATE_DIR}` and can be changed in the configuration.
|
||||
|
||||
This directory is quite valuable and it is rarely necessary to delete it. Please bear in mind that the build process will take significantly longer after deleting the cache.
|
||||
|
||||
## 7. Licence
|
||||
|
||||
```
|
||||
MIT License
|
||||
```
|
||||
|
||||
## 8. Further information
|
||||
|
||||
More information on the Yocto build system:
|
||||
|
||||
* [https://docs.yoctoproject.org](https://docs.yoctoproject.org)
|
24
files/0001-openembedded-disable-meta-python.patch
Normal file
24
files/0001-openembedded-disable-meta-python.patch
Normal 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
|
||||
|
@@ -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
image_build_increment.sample
Normal file
1
image_build_increment.sample
Normal file
@@ -0,0 +1 @@
|
||||
0
|
463
init.functions.sh
Normal file
463
init.functions.sh
Normal 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
|
||||
}
|
693
init.sh
693
init.sh
@@ -1,420 +1,365 @@
|
||||
#!/bin/bash
|
||||
|
||||
source init.functions.sh
|
||||
#set -x
|
||||
|
||||
BASEPATH=`pwd`
|
||||
FILES_DIR=$BASEPATH/files
|
||||
MACHINES="h7 hd51 hd60 hd61 osmio4k osmio4kplus"
|
||||
HINT_SYNTAX='Usage '$0' <machine> <image-version>'
|
||||
HINT_MACHINES="<$MACHINES all>"
|
||||
HINT_IMAGE_VERSIONS='<3.2> <3.1> <3.0>'
|
||||
|
||||
## Comatible and default image version
|
||||
DEFAULT_IMAGE_VERSION="3.2.4"
|
||||
COMPATIBLE_IMAGE_VERSIONS="$DEFAULT_IMAGE_VERSION 3.2"
|
||||
IMAGE_VERSION="$DEFAULT_IMAGE_VERSION"
|
||||
|
||||
## 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
|
||||
mkdir -p $LOG_PATH
|
||||
LOGFILE_NAME="$0_`date '+%Y%m%d_%H%M%S'`.log"
|
||||
LOGFILE=$LOG_PATH/$LOGFILE_NAME
|
||||
TMP_LOGFILE=$LOG_PATH/.tmp.log
|
||||
touch $LOGFILE
|
||||
|
||||
LOGFILE_LINK=$BASEPATH/$0.log
|
||||
|
||||
TMP_LOGFILE="$LOG_PATH/.$0-tmp.log"
|
||||
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
|
||||
my_echo "true" "$USER_CALL"
|
||||
|
||||
|
||||
# set passed parameters
|
||||
if [ "$1" = "" ]; then
|
||||
MACHINE="all"
|
||||
else
|
||||
MACHINE=$1
|
||||
## Current build env script version
|
||||
BUILD_ENV_VERSION=$(git -C $BASEPATH describe --tags 2>/dev/null)
|
||||
if [ -z "$BUILD_ENV_VERSION" ]; then
|
||||
BUILD_ENV_VERSION="unknown"
|
||||
fi
|
||||
|
||||
if [ "$2" = "" ]; then
|
||||
IMAGE_VERSION="3.2"
|
||||
else
|
||||
IMAGE_VERSION=$2
|
||||
fi
|
||||
## Machines
|
||||
# Identical listings
|
||||
MACHINES_IDENTICAL_HD51="hd51 ax51 mutant51"
|
||||
MACHINES_IDENTICAL_H7="h7 zgemmah7"
|
||||
MACHINES_IDENTICAL_HD60="hd60 ax60" #TODO: move into gfutures
|
||||
MACHINES_IDENTICAL_HD61="hd61 ax61" #TODO: move into gfutures
|
||||
|
||||
# check for empty machine
|
||||
if [ -z "$MACHINE" ]; then
|
||||
echo -e "\033[31;1mERROR:\tNo machine defined. Possible machines are $HINT_MACHINES. $HINT_SYNTAX ...\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
# gfutures listing
|
||||
MACHINES_GFUTURES="$MACHINES_IDENTICAL_HD51 bre2ze4k"
|
||||
# hisilcon listing #TODO: move into gfutures
|
||||
MACHINES_HISI="$MACHINES_IDENTICAL_HD60 $MACHINES_IDENTICAL_HD61"
|
||||
# airdigital listing
|
||||
MACHINES_AIRDIGITAL="$MACHINES_IDENTICAL_H7"
|
||||
# edision listing
|
||||
MACHINES_EDISION="osmio4k osmio4kplus"
|
||||
# ceryon listing
|
||||
MACHINES_CERYON="e4hdultra"
|
||||
|
||||
# check for valid machine
|
||||
if [ "$MACHINE" != "hd51" ] && [ "$MACHINE" != "h7" ] && [ "$MACHINE" != "hd60" ] && [ "$MACHINE" != "hd61" ] && [ "$MACHINE" != "osmio4k" ] && [ "$MACHINE" != "osmio4kplus" ] && [ "$MACHINE" != "all" ]; then
|
||||
echo -e "\033[31;1mERROR:\tInvalid machine defined. $HINT_SYNTAX. Possible machines are $HINT_MACHINES\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
# valid machine list
|
||||
MACHINES="$MACHINES_GFUTURES $MACHINES_HISI $MACHINES_AIRDIGITAL $MACHINES_EDISION $MACHINES_CERYON"
|
||||
|
||||
# check for image versions
|
||||
if [ "$IMAGE_VERSION" != "3.2" ] && [ "$IMAGE_VERSION" != "3.1" ] && [ "$IMAGE_VERSION" != "3.0" ]; then
|
||||
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"
|
||||
|
||||
function do_exec() {
|
||||
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
|
||||
MACHINE="all" # default for MACHINE, if not set
|
||||
HINT_MACHINES="Select a valid machine type (empty means <all> as default) <$MACHINES>"
|
||||
|
||||
## Backups
|
||||
BACKUP_PATH=$BASEPATH/backups
|
||||
mkdir -p $BACKUP_PATH
|
||||
BACKUP_SUFFIX=bak
|
||||
|
||||
YOCTO_GIT_URL=https://git.yoctoproject.org/git/poky
|
||||
TUXBOX_LAYER_GIT_URL=https://github.com/neutrino-hd
|
||||
# meta-neutrino project URL:
|
||||
PROJECT_URL="https://github.com/tuxbox-neutrino"
|
||||
|
||||
PYTHON2_LAYER_NAME=meta-python2
|
||||
PYTHON2_LAYER_GIT_URL=https://git.openembedded.org
|
||||
PYTHON2_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=4e4a302
|
||||
PYTHON2_BRANCH_HASH=27d2aeb
|
||||
fi
|
||||
|
||||
# clone required branch from yocto
|
||||
if test ! -d $BUILD_ROOT_DIR/.git; then
|
||||
echo -e "\033[36;1mCLONE POKY:\033[0m\nclone 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'
|
||||
do_exec "cd $BUILD_ROOT_DIR"
|
||||
do_exec "git checkout $YOCTO_BRANCH_HASH -b $IMAGE_VERSION"
|
||||
do_exec "git tag $IMAGE_VERSION"
|
||||
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
|
||||
echo -e "\033[36;1mdone ...\033[0m\n"
|
||||
else
|
||||
do_exec "cd $BUILD_ROOT_DIR"
|
||||
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 "\033[37;1mCHECKOUT:\033[0m\nswitch from $CURRENT_YOCTO_BRANCH to $IMAGE_VERSION..."
|
||||
do_exec "git checkout $IMAGE_VERSION"
|
||||
|
||||
echo -e "\033[37;1mUPDATE:\033[0m\nupdate $POKY_NAME from (branch $YOCTO_BRANCH_NAME) $YOCTO_GIT_URL ..."
|
||||
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
|
||||
|
||||
echo -e "\033[37;1mCHECKOUT:\033[0m\nswitch back to $YOCTO_BRANCH_NAME ..."
|
||||
do_exec "git checkout $YOCTO_BRANCH_NAME"
|
||||
do_exec "$GIT_PULL origin $YOCTO_BRANCH_NAME" ' ' 'show_output'
|
||||
|
||||
echo -e "\033[37;1mCHECKOUT:\033[0m\nswitch back to $IMAGE_VERSION ..."
|
||||
do_exec "git checkout $IMAGE_VERSION"
|
||||
|
||||
echo -e "\033[36;1mdone ...\033[0m\n"
|
||||
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
|
||||
}
|
||||
|
||||
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"
|
||||
## Help
|
||||
show_help() {
|
||||
if [[ $LANG == de_* ]]; then
|
||||
echo "Dieses Skript initialisiert und aktualisiert die Entwicklungsumgebung für den Bau von Images und Paketen für verschiedene Maschinenkonfigurationen."
|
||||
echo "Es klont und aktualisiert Meta-Layer aus vorgegebenen Repositories, bereitet die Build-Umgebung vor und unterstützt die Konfiguration für spezifische Maschinentypen."
|
||||
else
|
||||
META_NAME=$TMP_NAME
|
||||
echo "This script initializes and updates the development environment for building images and packages for various machine configurations."
|
||||
echo "It clones and updates meta-layers from specified repositories, prepares the build environment, and supports configuration for specific machine types."
|
||||
fi
|
||||
echo "$META_NAME"
|
||||
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"
|
||||
}
|
||||
|
||||
# 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
|
||||
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
|
||||
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;
|
||||
## Processing command line arguments
|
||||
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' -- "$@")
|
||||
if [ $? != 0 ] ; then
|
||||
my_echo "Error while process arguments" >&2
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Note the quotes around `$TEMP`: they are essential!
|
||||
eval set -- "$TEMP"
|
||||
|
||||
# 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##########################################################################################"
|
||||
# Extract arguments.
|
||||
while true ; do
|
||||
case "$1" in
|
||||
-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
|
||||
|
||||
## Validate the chosen image version
|
||||
if [[ ! " $COMPATIBLE_IMAGE_VERSIONS " =~ " $IMAGE_VERSION " ]]; then
|
||||
my_echo "\033[31;1mError: Invalid image version specified '$IMAGE_VERSION'. Available versions are: [$COMPATIBLE_IMAGE_VERSIONS]\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
## Layer sources
|
||||
YOCTO_GIT_URL="https://github.com/yoctoproject/poky.git"
|
||||
POKY="$(basename $YOCTO_GIT_URL .git)"
|
||||
POKY_NAME="$IMAGE_VERSION" #TODO
|
||||
BUILD_ROOT_DIR="$BASEPATH/$POKY-$IMAGE_VERSION"
|
||||
BUILD_ROOT="$BUILD_ROOT_DIR/build"
|
||||
|
||||
# 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
|
||||
OE_LAYER_NAME=meta-openembedded
|
||||
OE_LAYER_GIT_URL=https://github.com/openembedded/meta-openembedded.git
|
||||
OE_LAYER_PATCH_LIST=""
|
||||
|
||||
# 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
|
||||
fi
|
||||
OE_CORE_LAYER_NAME=openembedded-core
|
||||
OE_CORE_LAYER_GIT_URL=https://github.com/openembedded/openembedded-core.git
|
||||
|
||||
if test ! -f $BOX_BUILD_DIR/conf/bblayers.conf.$BACKUP_SUFFIX; then
|
||||
echo -e "\033[37;1m\tset base bblayer configuration for $CLC_ARG1...\033[0m"
|
||||
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
|
||||
fi
|
||||
fi
|
||||
}
|
||||
## Preset required branches and revs based on the selected image version
|
||||
case "$IMAGE_VERSION" in
|
||||
"3.2"|"3.2.4")
|
||||
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
|
||||
|
||||
# function create local dist directory to prepare for web access
|
||||
function create_dist_tree () {
|
||||
PAR1=$1
|
||||
if [ "$PAR1" != "all" ]; then
|
||||
# Check machine type
|
||||
if [ "$(is_valid_machine "$MACHINE")" = "false" ]; then
|
||||
my_echo "\033[31;1mNo valid machine defined.\033[0m"
|
||||
my_echo "$HINT_MACHINES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DIST_BASEDIR="$BASEPATH/dist/$IMAGE_VERSION"
|
||||
DIST_LINK=$DIST_BASEDIR/$PAR1
|
||||
DIST_LINK_IMAGES=$DIST_BASEDIR/$PAR1/images
|
||||
DIST_LINK_IPK=$DIST_BASEDIR/$PAR1/ipk
|
||||
DIST_LINK_LICENSE=$DIST_BASEDIR/$PAR1/licenses
|
||||
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 "------------------------------------------------------------------------------------------"
|
||||
|
||||
if test ! -d "$DIST_LINK"; then
|
||||
echo -e "\n\033[37;1mcreate directory:\033[0m $DIST_LINK"
|
||||
do_exec "mkdir -p $DIST_LINK"
|
||||
fi
|
||||
## reset build
|
||||
if [[ $DO_RESET == "$true" ]]; then
|
||||
do_reset "$MACHINES"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
DEPLOY_DIR=$BUILD_ROOT_DIR/$PAR1/tmp/deploy
|
||||
DEPLOY_DIR_IMAGES=$DEPLOY_DIR/images/$PAR1
|
||||
DEPLOY_DIR_IPK=$DEPLOY_DIR/ipk
|
||||
DEPLOY_DIR_LICENSE=$DEPLOY_DIR/licenses
|
||||
## Fetch meta sources
|
||||
# fetch required branch from yocto
|
||||
fetch_meta "" $COMPATIBLE_BRANCH $YOCTO_GIT_URL $YOCTO_SRCREV $BUILD_ROOT_DIR
|
||||
|
||||
if test ! -L "$DIST_LINK_IMAGES"; then
|
||||
echo -e "\033[37;1mcreate symlink:\033[0m $DIST_LINK_IMAGES"
|
||||
do_exec "ln -sf $DEPLOY_DIR_IMAGES $DIST_LINK_IMAGES"
|
||||
fi
|
||||
# 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"
|
||||
|
||||
if test ! -L "$DIST_LINK_IPK"; then
|
||||
echo -e "\033[37;1mcreate symlink:\033[0m $DIST_LINK_IPK"
|
||||
do_exec "ln -sf $DEPLOY_DIR_IPK $DIST_LINK_IPK"
|
||||
fi
|
||||
# fetch required branch of oe-core from openembedded
|
||||
fetch_meta "" master $OE_CORE_LAYER_GIT_URL "" $BUILD_ROOT_DIR/$OE_CORE_LAYER_NAME
|
||||
|
||||
if test ! -L "$DIST_LINK_LICENSE"; then
|
||||
echo -e "\033[37;1mcreate symlink:\033[0m $DIST_LINK_LICENSE"
|
||||
do_exec "ln -sf $DEPLOY_DIR_LICENSE $DIST_LINK_LICENSE"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
# 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
|
||||
|
||||
# create configuration for machine
|
||||
# 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
|
||||
for M in $MACHINES ; do
|
||||
create_local_config $M;
|
||||
create_dist_tree $M;
|
||||
done
|
||||
my_echo "\033[32;1mdone!\033[0m\n"
|
||||
else
|
||||
create_local_config $MACHINE;
|
||||
create_dist_tree $MACHINE;
|
||||
my_echo "\033[32;1mdone!\033[0m\n"
|
||||
fi
|
||||
|
||||
# check and create distribution directory inside html directory for online update
|
||||
if test ! -L /var/www/html/dist; then
|
||||
echo -e "\033[37;1mNOTE:\t Online update usage.\033[0m"
|
||||
echo -e "\t##########################################################################################"
|
||||
echo -e "\t# /var/www/html/dist doesn't exists. #"
|
||||
echo -e "\t# If you want to use online update, please configure your webserver and use dist content #"
|
||||
echo -e "\t# Super user permissions are required to create symlink... #"
|
||||
echo -e "\t# An easy way is to create a symlink to dist directory: #"
|
||||
echo -e "\t# \033[37;1msudo ln -s $BASEPATH/dist /var/www/html/dist\033[0m #"
|
||||
echo -e "\t########################################################################################## "
|
||||
fi
|
||||
## Create distribution structure
|
||||
create_dist_tree;
|
||||
|
||||
## Distribution directory inside httpd directory for online update
|
||||
my_echo "\033[37;1mLocal setup for package online update.\033[0m"
|
||||
my_echo "------------------------------------------------------------------------------------------------"
|
||||
my_echo "If you want to use online update for your devices, please configure your webserver and use the"
|
||||
my_echo "content of $DIST_DIR"
|
||||
my_echo "as destination for your webserver (e.g. apache, nginx, lighttpd or what ever you want)"
|
||||
my_echo ""
|
||||
|
||||
## 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
|
||||
|
@@ -1,295 +1,440 @@
|
||||
### Host variables
|
||||
#
|
||||
# Determine how many tasks bitbake should run in parallel:
|
||||
BB_NUMBER_THREADS ?= "8"
|
||||
#
|
||||
# Determine how many processes make should run in parallel when running compile tasks:
|
||||
PARALLEL_MAKE ?= "-j 4"
|
||||
|
||||
DISTRO = "tuxbox"
|
||||
|
||||
|
||||
### System variables
|
||||
#
|
||||
#DL_DIR ?= "${COREBASE}/yocto-downloads"
|
||||
DL_DIR = "${HOME}/Downloads"
|
||||
|
||||
### sdk options
|
||||
#
|
||||
#SDKMACHINE ?= "i686"
|
||||
SDKMACHINE = "x86_64"
|
||||
#SDKIMAGE_FEATURES="dev-pkgs dbg-pkgs src-pkgs "
|
||||
|
||||
|
||||
### time zone
|
||||
#
|
||||
DEFAULT_TIMEZONE = "Europe/Berlin"
|
||||
|
||||
|
||||
### base build and source directory
|
||||
#
|
||||
YOCTO_BASEDIR = "${COREBASE}"
|
||||
|
||||
|
||||
### Disk Space Monitoring during the build
|
||||
#
|
||||
BB_DISKMON_DIRS = "\
|
||||
STOPTASKS,${TMPDIR},1G,100K \
|
||||
STOPTASKS,${DL_DIR},1G,100K \
|
||||
STOPTASKS,${SSTATE_DIR},1G,100K \
|
||||
ABORT,${TMPDIR},100M,1K \
|
||||
ABORT,${DL_DIR},100M,1K \
|
||||
ABORT,${SSTATE_DIR},100M,1K"
|
||||
|
||||
|
||||
### Hash Equivalence
|
||||
#
|
||||
# Enable support for automatically running a local hash equivalence server and
|
||||
# instruct bitbake to use a hash equivalence aware signature generator. Hash
|
||||
# equivalence improves reuse of sstate by detecting when a given sstate
|
||||
# artifact can be reused as equivalent, even if the current task hash doesn't
|
||||
# match the one that generated the artifact.
|
||||
#
|
||||
# A shared hash equivalent server can be set with "<HOSTNAME>:<PORT>" format+#
|
||||
#
|
||||
BB_HASHSERVE = "auto"
|
||||
BB_SIGNATURE_HANDLER = "OEEquivHash"
|
||||
|
||||
BB_DANGLINGAPPENDS_WARNONLY = "1"
|
||||
|
||||
### Qemu configuration
|
||||
#
|
||||
PACKAGECONFIG_pn-qemu-native = "sdl"
|
||||
|
||||
CONF_VERSION = "1"
|
||||
|
||||
|
||||
### Image settings
|
||||
# Image size:
|
||||
# possible are "small" or "normal" (normal means the same like empty string)
|
||||
#
|
||||
#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 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}"
|
||||
|
||||
|
||||
### default image root password
|
||||
# set initial password for user root. Keep empty for root:
|
||||
#
|
||||
ROOTPW = ""
|
||||
|
||||
|
||||
### Choose which plugins should be installed
|
||||
#
|
||||
PLUGIN_INSTALL += "msgbox tuxcom shellexec input tuxwetter"
|
||||
|
||||
|
||||
### 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"
|
||||
|
||||
|
||||
### 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.
|
||||
# Official mirrors to find here: http://sstate.yoctoproject.org/
|
||||
# Ensure you have a fast internet. After 1st build you can disable this
|
||||
# SSTATE_MIRRORS += "\
|
||||
# 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/3.0.3/PATH;downloadfilename=PATH \n \
|
||||
# file://.* http://sstate.yoctoproject.org/3.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.2/PATH;downloadfilename=PATH \n \
|
||||
# "
|
||||
# This is our own stock of sstate cache related of last tuxbox builds.
|
||||
SSTATE_MIRRORS = "\
|
||||
file://.* https://sstate.tuxbox-upload.de/all/sstate-cache/PATH;downloadfilename=PATH \n \
|
||||
"
|
||||
|
||||
|
||||
### masked recipes
|
||||
# This will ignore recipes to build.
|
||||
# NOTE: Some masked targets with related depends could break the build.
|
||||
# BBMASK += "/meta-neutrino/recipes-qt/qt5"
|
||||
|
||||
# These entries replace default installed entries which are contained in ./meta-neutrino/recipes-images/images/neutrino-image-base.inc.
|
||||
# You can add more entries with variable IMAGE_INSTALL_append see below...
|
||||
#
|
||||
# IMAGE_INSTALL += " \
|
||||
# vsftpd \
|
||||
# "
|
||||
# IMAGE_INSTALL = " \
|
||||
# autofs \
|
||||
# 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 += ...
|
||||
#
|
||||
# IMAGE_INSTALL_append = " gdb-dbg glibc-dbg glibc-thread-db qtwebflix webmin rpm"
|
||||
# IMAGE_INSTALL_append = " gdb-dbg glibc-dbg glibc-thread-db webmin rpm"
|
||||
### 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:
|
||||
# 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
|
||||
#BB_NUMBER_THREADS = "16"
|
||||
# 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:
|
||||
# ~ $ lscpu | grep -E '^Thread|^CPU\('
|
||||
# See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=distro_codename#term-PARALLEL_MAKE
|
||||
#PARALLEL_MAKE = "-j 8"
|
||||
|
||||
### 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
|
||||
# See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=distro_codename#term-SDKMACHINE
|
||||
#SDKMACHINE = "i686"
|
||||
SDKMACHINE = "x86_64"
|
||||
#SDKIMAGE_FEATURES="dev-pkgs dbg-pkgs src-pkgs "
|
||||
|
||||
### time zone
|
||||
DEFAULT_TIMEZONE = "Europe/Berlin"
|
||||
|
||||
### Disk Space Monitoring during the build. Default disabled, but it's a good Idea to enable.
|
||||
# see: https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-BB_DISKMON_DIRS
|
||||
BB_DISKMON_DIRS = "\
|
||||
STOPTASKS,${TMPDIR},1G,100K \
|
||||
STOPTASKS,${DL_DIR},1G,100K \
|
||||
STOPTASKS,${SSTATE_DIR},500M,100K \
|
||||
ABORT,${TMPDIR},100M,1K \
|
||||
ABORT,${DL_DIR},100M,1K \
|
||||
ABORT,${SSTATE_DIR},100M,1K \
|
||||
"
|
||||
|
||||
### Hash Equivalence
|
||||
# Enable support for automatically running a local hash equivalence server and
|
||||
# instruct bitbake to use a hash equivalence aware signature generator. Hash
|
||||
# equivalence improves reuse of sstate by detecting when a given sstate
|
||||
# artifact can be reused as equivalent, even if the current task hash doesn't
|
||||
# match the one that generated the artifact.
|
||||
#
|
||||
# A shared hash equivalent server can be set with "<HOSTNAME>:<PORT>" format+#
|
||||
#
|
||||
BB_HASHSERVE = "auto"
|
||||
BB_SIGNATURE_HANDLER = "OEEquivHash"
|
||||
#
|
||||
# https://docs.yoctoproject.org/ref-manual/variables.html#term-BB_DANGLINGAPPENDS_WARNONLY
|
||||
BB_DANGLINGAPPENDS_WARNONLY = "1"
|
||||
|
||||
### Qemu configuration
|
||||
PACKAGECONFIG_pn-qemu-native = "sdl"
|
||||
|
||||
### 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"
|
||||
|
||||
### Base directory of the OpenEmbedded build system used by build output and intermediate files (other than the shared state cache).
|
||||
# By default, the TMPDIR variable points to tmp within the build directory.
|
||||
# See: https://docs.yoctoproject.org/ref-manual/variables.html?highlight=sdkimage_features#term-TMPDIR
|
||||
#TMPDIR = "${TOPDIR}/tmp"
|
||||
|
||||
### base build and source directory
|
||||
YOCTO_BASEDIR = "${COREBASE}"
|
||||
|
||||
### Some targets are using ccache. Here you can set the path for ccache store. Default it is located wthin the TMPDIR,
|
||||
# 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).
|
||||
# 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"
|
||||
|
||||
### 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
|
||||
# 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
|
||||
# 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/
|
||||
# Ensure you have a fast internet. After 1st build you can disable this
|
||||
# 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/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.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.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.
|
||||
SSTATE_MIRRORS += "\
|
||||
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 \
|
||||
#"
|
||||
|
||||
# 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.
|
||||
# NOTE: Some masked targets with related depends could break the build.
|
||||
#BBMASK += "/meta-neutrino/recipes-qt/qt5"
|
||||
|
||||
### Build packages but do not install packages into image
|
||||
# https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-EXTRA_IMAGEDEPENDS
|
||||
#EXTRA_IMAGEDEPENDS += " \
|
||||
# gdb \
|
||||
# samba \
|
||||
# vsftpd \
|
||||
# "
|
||||
#EXTRA_IMAGEDEPENDS += " \
|
||||
# kodi \
|
||||
# "
|
||||
|
||||
### 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
|
||||
# See: ./meta-neutrino/recipes-images/images/neutrino-image-base.inc.
|
||||
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
10
translate-md-config.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"template_md": "template.md",
|
||||
"output_dir": ".",
|
||||
"prefix": "README_",
|
||||
"main_doc": "README.md",
|
||||
"target_languages": {
|
||||
"de": ["German", "🇩🇪"],
|
||||
"en": ["English", "🇬🇧"]
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user