38 Commits

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

This commit improves the script's maintainability and robustness by clarifying version management and optimizing configuration handling.
2024-05-12 20:06:23 +02:00
Thilo Graf
dc119f2cab local.conf.common.sample: allign to changed neutrino recipe name and API-keys 2024-05-11 20:24:07 +02:00
Thilo Graf
f058f2dc4f readme: update readme 2024-05-11 20:22:26 +02:00
Thilo Graf
f610523694 init: Remove DIST_URL
Resolve ambiguity of DIST_URL with explicit assignment to UPDATE_SERVER_URL
2024-05-03 22:06:09 +02:00
Thilo Graf
a8123d868a update Readme 2024-05-03 20:59:33 +02:00
Thilo Graf
1c8c28d6fe init.sh: Refactor script configuration and directory paths
- Update DIST_BASEDIR assignment to use $DIST_DIR for improved
  clarity and consistency in directory management.
- Rename HTTPD_DIST_HOSTNAME and HTTPD_DIST_DIR to
  UPDATE_SERVER_URL and DIST_DIR respectively, across the script to
  better reflect their purpose and usage.
- Introduce LOCAL_CONFIG_FILE_INC_PATH variable initialization in
  the global scope for enhanced script modularity and maintainability.
- Adjust getopt configuration to align with the renamed and newly
  introduced variables.
2024-03-25 21:30:04 +01:00
Thilo Graf
e5e068c9c6 init.sh: fix typo 2024-03-25 20:13:45 +01:00
Thilo Graf
5a6564cfa1 init_funtions.sh: remove invalid option from unlink 2024-03-25 19:47:46 +01:00
Thilo Graf
17c788f0b6 init.sh: update instructions 2024-03-25 19:43:26 +01:00
Thilo Graf
2528ed229f update Readme 2024-03-13 17:51:44 +01:00
Thilo Graf
b4102b8629 init.sh: add reset feature 2024-03-04 10:54:20 +01:00
13 changed files with 1324 additions and 855 deletions

View File

@@ -1,25 +0,0 @@
from googletrans import Translator
def translate_readme(input_text, target_lang):
translator = Translator()
translated = translator.translate(input_text, dest=target_lang)
translated_text = translated.text
# add hint for automatically translation
translated_text = f"Note: This is an automatically translated file. Original content from [here](https://github.com/tuxbox-neutrino/buildenv/blob/3.2.4/README-de.md):\n\n{translated_text}"
# Use this workaround, because translater breaks some links and anchors
translated_text = translated_text.replace("[Build Image](#Build Image)", "[Build Image](#build-image)")
translated_text = translated_text.replace("devtool -reference.html", "devtool-reference.html")
translated_text = translated_text.replace("dev-manual -common-tasks.html", "dev-manual-common-tasks.html")
translated_text = translated_text.replace("Clone #1-Init-Script", "#1-clone-init-script")
return translated_text
if __name__ == "__main__":
input_text = open("README-de.md", "r").read()
target_lang = "en" # target language is english
translated_text = translate_readme(input_text, target_lang)
with open("README-en.md", "w") as outfile:
outfile.write(translated_text)

View File

@@ -1,42 +0,0 @@
name: Translate README
on:
push:
branches:
- 3.2.4
paths:
- 'README-de.md'
permissions:
contents: write
jobs:
translate:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install --upgrade googletrans==3.1.0a0
- name: Translate README
run: |
python .github/scripts/translate.py
- name: Commit and push translated README
run: |
git config --global user.email "actions@github.com"
git config --global user.name "GitHub Actions"
git add README-en.md
git commit -m "readme: Automatically translated README to English"
git push

87
.github/workflows/translateandtag.yml vendored Normal file
View 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

5
.gitignore vendored
View File

@@ -18,3 +18,8 @@ local build increment
*/poky
poky-*
venv
tagit.py
tagit-config.json
translate-md.py

View File

@@ -1,213 +0,0 @@
# Schnellstart Image-Erstellung #
- [Vorbereitung](#Vorbereitung)
- [Image bauen](#Image-bauen)
- [Aktualisierung](#Aktualisierung)
- [Arbeiten an Zielquellen](#Arbeiten-an-Zielquellen)
- [Übersicht über globale Konfigurationsdateien](#Übersicht-über-globale-Konfigurationsdateien)
## Vorbereitung
### Erforderliche Host-Pakete installieren (Debian 11)
Zur Verwendung mit anderen Distributionen siehe: [Yocto Project Quick Build](https://docs.yoctoproject.org/3.2.4/ref-manual/ref-system-requirements.html#supported-linux-distributions)
> :memo: **HINWEIS:** Bei Verwendung der Tuxbox-Builder-VM (welche nicht zwingend erforderlich ist), springe bitte zu [Schritt 1](#1-Init-Skript-klonen). Die Tuxbox-Builder-VM enthält bereits erforderliche Pakete. Details und Download von Tuxbox-Builder VM siehe: [Tuxbox-Builder](https://sourceforge.net/projects/n4k/files/Tuxbox-Builder)
```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 libcapstone4 libsdl2-dev doxygen
```
> :memo: **HINWEIS:** Bei Debian 10 (buster) libcapstone3 verwenden.
#### Empfohlene Zusatzpakete zur grafischen Unterstützung und Analyse (z.B. mit Kdevelop, Meld):
```bash
apt-get install -y gitk git-gui meld cppcheck clazy kdevelop
```
### Optional: Falls kein konfiguriertes Git vorhanden ist, gib bitte Deine globalen Git-Benutzerdaten ein:
```bash
git config --global user.email "you@example.com"
git config --global user.user "Dein Name"
```
## Image bauen
> :memo: **Hinweis:** Einige Pfade basieren auf Vorgaben, die vom Init-Script erzeugt werden. Einige Einträge werden als ```<Platzhalter>``` dargestellt, die entsprechend angepasst werden müssen.
> ### 1. Init-Skript klonen.
```bash
git clone https://github.com/tuxbox-neutrino/buildenv.git
cd buildenv
```
> ### 2. Init-Skript ausführen
```bash
./init
cd poky-3.2.4
```
> ### 3. Liste möglicher Maschinentypen anzeigen
```bash
ls build
```
> ### 4. Umgebungsskript ausführen
```bash
. ./oe-init-build-env build/<Machine-Type aus der Liste von Schritt 3 hier eintragen>
```
> ### 5. Bauen
```bash
bitbake neutrino-image
```
Das kann eine Weile dauern. Einige Warnmeldungen können ignoriert werden. Fehlermeldungen, welche die Setscene-Tasks betreffen, sind kein Problem, aber Fehler während der Build- und Package-Tasks brechen den Prozess in den meißten Fällen ab. [Bitte melde in diesem Fall den Fehler oder sende Deine Lösung an uns](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.
...
```
**Das war's ...**
Erstellte Images und Pakete sind zu finden unter:
```
~/build/poky-3.2.4/build/<machine>/tmp/deploy
```
oder im dist-Verzeichnis:
```
~/build/dist/<Image-Version>/<machine>/
```
## Aktualisierung
> :memo: Manuelle Aktualisierungen für beliebeige Ziel-Quellen sind nicht erforderlich. Dies wird automatisch bei jedem aufgerufenen Ziel mit Bitbake durchgeführt. Dadurch werden auch immer erforderliche Abhängigkeiten aktualisiert. Wenn man die volle Kontrolle über bestimmte Ziel-Quellen haben möchte, siehe [Arbeiten an Zielquellen](#Arbeiten-an-Zielquellen)!
Falls [Schritte 1 bis 4](#3-Liste-möglicher-Maschinentypen-anzeigen) bereits ausgeführt wurden, ist nur Schritt 5 erforderlich:
### Update Image
```bash
bitbake neutrino-image
```
### Update Ziel
```bash
bitbake <target>
```
### Meta-Layer-Repositories aktualisieren
Die erneute Ausführung des Init-Skripts aktualisiert die enthaltenen Meta-Layer auf den Stand der Remote-Repositories.
```bash
cd $HOME/build
./init
```
Die angestoßenen Update-Routinen des Init-scripts sollten nicht festgeschriebene Änderungen vorübergehend stashen bzw. rebasen lokale Commits auf die Remote-Änderungen. Konflikte muss man jedoch manuell auflösen. Natürlich kann man seine lokalen Meta-Layer für Meta-Neutrino- und Maschinen-Layer-Repositories manuell aktualisieren und modifizieren.
> :memo: **Hinweis:** Konfigurationsdateien bleiben unberührt. Neue oder geänderte Konfigurationsoptionen werden nicht berücksichtigt. Bitte überprüfe ggf. die Konfiguration.
## Arbeiten an Zielquellen
Wenn man die volle Kontrolle über die Ziel-Quellen haben möchte, sollten die Quellcodes in den Workspace verschoben werden. 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).
## 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 $HOME/build/poky-3.2.4/build/<machine>/conf $HOME/build/poky-3.2.4/build/<machine>/conf.01
cd $HOME/build
./init
```
## Neubau eines einzelnen Ziels erzwingen
In einigen Fällen kann es vorkommen, dass ein Target, warum auch immer, abbricht. Man sollte deswegen nicht in Panik verfallen und deswegen den tmp-Ordner und den sstate-cache löschen. Das kann man auch für jedes Target einzeln machen.
> :memo: Insbesondere defekte Archiv-URL's 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 funktioneren 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 erzwingen, müssen alle erzeugten Paket-, Build- und Cachedaten bereinigt werden.
```bash
bitbake -c cleansstate <target>
```
anschließend neu bauen:
```bash
bitbake <target>
```
## Vollständigen Imagebau erzwingen
Wenn Du einen kompletten Imagebau erzwingen möchtest, kann man das tmp-Verzeichnis löschen (oder umbenennen):
```bash
mv tmp tmp.01
bitbake neutrino-image
```
Wenn man den sstate-cache **nicht** gelöscht hat, sollte das Image in relativ kurzer Zeit fertig gebaut sein. Daher wird empfohlen, den sstate-cache beizubehalten. Das Verzeichnis wo sich der sstate-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 Build in diesem Fall sehr viel mehr Zeit in Anspruch nimmt.
> :bulb: Man kann Bitbake anweisen, keinen sstate-cache zu verwenden.
```bash
bitbake --no-setscene neutrino-image
```
oder
```bash
bitbake --skip-setscene neutrino-image
```
## Bei Bedarf anpassen
Es wird empfohlen, zum ersten Mal ohne Änderungen an den Konfigurationsdateien zu bauen, um einen Eindruck davon zu bekommen, wie der Build-Prozess funktioniert, und um die Ergebnisse zu sehen.
Die Einstellmöglichkeiten sind sehr umfangreich und für Einsteiger nicht wirklich überschaubar. Das Yoctoproject ist jedoch sehr
umfassend dokumentiert und bietet die beste Informationsquelle.
**Wichtig für Entwickler**: "[Arbeiten an Zielquellen](#Arbeiten-an-Zielquellen)"!
> :memo: **Bitte ändere nicht die Yocto-Recipes! Dies wird vom Yocto-Team nicht empfohlen, aber man kann zum Vervollständigen, Erweitern oder Überschreiben von Meta-Core-Recipes [.bbappend](https://docs.yoctoproject.org/3.2.4/dev-manual/dev-manual-common-tasks.html#using-bbappend-files-in-your-layer)-Dateien verwenden.**
### Übersicht über globale Konfigurationsdateien
Für die lokale Konfiguration werden diese Konfigurationsdateien innerhalb der Build-Verzeichnissen benötigt:
> $HOME/build/poky-3.2.4/build/```<machine>```/conf/local.conf
Diese generierte local.conf enthält nur wenige Zeilen, besitzt aber eine Zeile, die auf eine gemeinsame Konfigurationsdatei zeigt, die für alle Images und unterstützten Maschinentypen gültig ist und kann man mit eigenen Optionen füttern.
> $HOME/build/local.conf.common.inc
Diese **.inc** Datei wurde aus der geklonten Beispieldatei beim erstmaligen ausführen des init-Scripts erzeugt.
> local.conf.common.inc.sample
Diese Beispieldatei sollte unberührt bleiben, um mögliche Konflikte beim Aktualisieren des build-Repositories zu vermeiden und um zu sehen, was sich geändert haben könnte.
Nach einer Aktualisierung des build-Repositries könnten einige 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 anpassen.
Natürlich kann man ```$HOME/Build/poky-3.2.4/build/<machine>/conf/local.conf``` mit eigenen Anforderungen ändern und als separate Konfigurationsdatei für einen Maschinentyp verwenden.
#### Musterkonfiguration für bblayers.conf:
> $HOME/build/poky-3.2.4/build/```<machine>```/conf/bblayers.conf
```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/<username>build/poky-3.2.4/meta \
/home/<username>/build/poky-3.2.4/meta-poky \
/home/<username>/build/poky-3.2.4/meta-yocto-bsp \
"
BBLAYERS += " \
/home/<username>/build/poky-3.2.4/meta-neutrino \
/home/<username>/build/poky-3.2.4/meta-<machine-brand-or-bsp-name> \
/home/<username>/build/poky-3.2.4/meta-openembedded/meta-oe \
"
BBLAYERS += " \
/home/<username>/build/poky-3.2.4/meta-python2 \
"
BBLAYERS += " \
/home/<username>/build/poky-3.2.4/meta-qt5 \
"
```
## Mehr Informationen
Weitere Informationen zum Yocto Buildsystem:
* https://docs.yoctoproject.org/3.2.4/index.html

View File

@@ -1,215 +0,0 @@
Note: This is an automatically translated file. Original content from [here](https://github.com/tuxbox-neutrino/buildenv/blob/3.2.4/README-de.md):
# Quick start image creation #
- [Preparation](#Preparation)
- [Build Image](#build-image)
- [Update](#Update)
- [Working on Target Sources](#Working-on-Target-Sources)
- [Overview of global configuration files](#overview-of-global-configuration-files)
## Preparation
### Install required host packages (Debian 11)
For use with other distributions see: [Yocto Project Quick Build](https://docs.yoctoproject.org/3.2.4/ref-manual/ref-system-requirements.html#supported-linux-distributions)
> :memo: **NOTE:** If using the Tuxbox Builder VM (which is not mandatory), please skip to [Step 1](#1-clone-init-script). The Tuxbox Builder VM already contains required packages. Details and download of Tuxbox-Builder VM see: [Tuxbox-Builder](https://sourceforge.net/projects/n4k/files/Tuxbox-Builder)
```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 libcapstone4 libsdl2-dev doxygen
```
> :memo: **NOTE:** On Debian 10 (buster) use libcapstone3.
#### Recommended additional packages for graphical support and analysis (e.g. with Kdevelop, Meld):
```bash
apt-get install -y gitk git-gui meld cppcheck clazy kdevelop
```
### Optional: If there is no configured Git, please enter your global Git user data:
```bash
git config --global user.email "you@example.com"
git config --global user.user "Your name"
```
## Build image
> :memo: **Note:** Some paths are based on defaults generated by the init script. Some entries are displayed as ```<placeholder>```, which need to be adjusted accordingly.
> ### 1. Clone init script.
```bash
git clone https://github.com/tuxbox-neutrino/buildenv.git
cd buildenv
```
> ### 2. Run init script
```bash
./init
cd poky-3.2.4
```
> ### 3. Show list of possible machine types
```bash
ls build
```
> ### 4. Run environment script
```bash
. ./oe-init-build-env build/<enter machine type from the list from step 3 here>
```
> ### 5. Build
```bash
bitbake neutrino image
```
This could take a while. Some warning messages can be ignored. Error messages affecting the setscene tasks are not a problem, but errors during the build and package tasks terminate the process in most cases. [In this case, please report the error or send your solution to us](https://forum.tuxbox-neutrino.org/forum/viewforum.php?f=77). Help is very welcome.
When everything is done, you should see a message similar to this:
```bash
...
NOTE: Tasks Summary: Attempted 4568 tasks of which 4198 didn't need to be rerun and all succeeded.
...
```
**That's it...**
Created images and packages can be found at:
```
~/build/poky-3.2.4/build/<machine>/tmp/deploy
```
or in the dist directory:
```
~/build/dist/<image version>/<machine>/
```
## Update
> :memo: Manual updates for arbitrary target sources are not required. This is done automatically for every target accessed using Bitbake. This means that required dependencies are always updated. If you want full control over specific target sources, see [Working on Target Sources](#Working-on-Target-Sources)!
If [Steps 1 to 4](View #3-list-of-possible-machine-types) have already been completed, only step 5 is required:
### Update image
```bash
bitbake neutrino image
```
### Update target
```bash
bitbake <target>
```
### Update meta layer repositories
Re-executing the init script updates the included meta layers to the status of the remote repositories.
```bash
cd $HOME/build
./init
```
The triggered update routines of the init script should temporarily stash uncommitted changes or rebase local commits to the remote changes. However, conflicts must be resolved manually. Of course, you can manually update and modify your local meta layers for meta neutrino and machine layer repositories.
> :memo: **Note:** Configuration files remain untouched. New or changed configuration options are not taken into account. Please check the configuration if necessary.
## Working on target sources
If you want to have full control over the target sources, the source codes should be moved to the workspace. Please refer
[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).
## Reset configuration
If you want to reset your machine configurations, please rename the conf directory (deletion is not recommended) and run the init script again.
```bash
mv $HOME/build/poky-3.2.4/build/<machine>/conf $HOME/build/poky-3.2.4/build/<machine>/conf.01
cd $HOME/build
./init
```
## Force rebuild of a single target
In some cases it can happen that a target breaks off for whatever reason. You shouldn't panic and delete the tmp folder and the sstate cache. You can also do this for each target individually.
> :memo: In particular, broken archive URLs can lead to termination. However, these errors are always displayed and you can check the URL. Often it's just the servers and they even work again after a few minutes.
To make sure whether the recipe in question actually has a problem, it makes sense to completely clean up the target in question and rebuild it. To enforce this, all generated package, build and cache data must be cleaned up.
```bash
bitbake -c cleansstate <target>
```
then rebuild:
```bash
bitbake <target>
```
## Force full image build
If you want to force a complete image build, you can delete (or rename) the tmp directory:
```bash
mv tmp tmp.01
bitbake neutrino image
```
If you have **not** cleared the sstate cache, the image should be built in a relatively short time. Therefore, it is recommended to keep the sstate cache. The directory where the sstate cache is located is determined via the variable ```${SSTATE_DIR}``` and can be adjusted in the configuration.
This directory is quite valuable and only in rare cases is it necessary to delete this directory. Please note that the build will take much longer in this case.
> :bulb: You can tell Bitbake not to use sstate cache.
```bash
bitbake --no-setscene neutrino-image
```
or
```bash
bitbake --skip-setscene neutrino-image
```
## Adjust if necessary
It is recommended to build for the first time without making any changes to the configuration files to get an idea of how the build process works and to see the results.
The setting options are very extensive and not really manageable for beginners. However, the Yoctoproject is very
comprehensively documented and provides the best source of information.
**Important for developers**: "[Working on Target Sources](#Working-on-Target-Sources)"!
> :memo: **Please do not change the Yocto recipes! This is not recommended by the Yocto team, but you can use [.bbappend](https://docs.yoctoproject.org/3.2.4/dev-manual/dev-manual-common-tasks.html#using-bbappend-files-in-your-layer) files.**
### Overview of global configuration files
For local configuration, these configuration files are required within the build directories:
> $HOME/build/poky-3.2.4/build/```<machine>```/conf/local.conf
This generated local.conf only contains a few lines, but has a line that points to a common configuration file that is valid for all images and supported machine types and can be fed with your own options.
> $HOME/build/local.conf.common.inc
This **.inc** file was created from the cloned example file when running the init script for the first time.
> local.conf.common.inc.sample
This example file should be left untouched to avoid possible conflicts when updating the build repository and to see what might have changed.
After an update to the build repository, some new or changed options may have been added or removed that are not reflected in the included configuration file. You should take this case into account in your own configuration and adapt it if necessary.
Of course, you can modify ```$HOME/Build/poky-3.2.4/build/<machine>/conf/local.conf``` with your own requirements and use it as a separate configuration file for a machine type.
#### Sample configuration for bblayers.conf:
> $HOME/build/poky-3.2.4/build/```<machine>```/conf/bblayers.conf
```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/<username>build/poky-3.2.4/meta \
/home/<username>/build/poky-3.2.4/meta-poky \
/home/<username>/build/poky-3.2.4/meta-yocto-bsp \
"
BBLAYERS += "\
/home/<username>/build/poky-3.2.4/meta-neutrino \
/home/<username>/build/poky-3.2.4/meta-<machine-brand-or-bsp-name> \
/home/<username>/build/poky-3.2.4/meta-openembedded/meta-oe \
"
BBLAYERS += "\
/home/<username>/build/poky-3.2.4/meta-python2 \
"
BBLAYERS += "\
/home/<username>/build/poky-3.2.4/meta-qt5 \
"
```
## More information
Further information about the Yocto build system:
* https://docs.yoctoproject.org/3.2.4/index.html

View File

@@ -1,7 +1,9 @@
# Documentation
## Localized `README.md`'s
| Language |
| -------------------------- |
| [English](README-en.md) |
| [German](README-de.md) |
This document is available in the following languages:
<!-- LANGUAGE_LINKS_START -->
[🇩🇪 German](README_de.md) | [🇬🇧 English](README_en.md)
<!-- LANGUAGE_LINKS_END -->
Please choose your preferred language by clicking on the links above.

370
README_de.md Normal file
View 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
View File

@@ -0,0 +1,374 @@
<!-- LANGUAGE_LINKS_START -->
[🇩🇪 German](README_de.md) | <span style="color: grey;">🇬🇧 English</span>
<!-- LANGUAGE_LINKS_END -->
This script serves as a tool to simplify setting up a development environment and the build process for images that 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 preinstalling the necessary dependencies, basic configurations, and metalayers, 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 TuxboxNeutrino 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 metalayer 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 [TuxboxBuilder](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 metalayer 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 subdirectories)
:
├── init.sh <-- the init script
├── local.conf.common.inc <-- global user configuration, included by the permachine 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 metalayers
:
└── build <-- build subdirectories live here; after step 2.2 you are inside one of the machine build subdirectories
├── <machine x> <-- build subdirectory for machine type x
│ ├── conf <-- configuration folder for layers and user settings
│ │ ├── bblayers.conf <-- configuration file for the metalayers
│ │ └── 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 subdirectory 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 subdirectory.
```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 subdirectory, 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 metalayer repositories
Running the init script with the `--update` parameter upgrades the included metalayers to the state of their remote repositories.
```bash
./init --update
```
If you have modified the metalayers, 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 metalayers (metaneutrino 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 buildsystemprovided `./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 buildscript repository and to see what might have changed.
After an update of the buildscript 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 metalayers! 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 metalayers 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 metalayers 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 packages 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 packages 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 sstatecache. You can perform cleanups 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 subdirectory. 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)

View File

@@ -2,12 +2,13 @@
## 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=$(echo -e "${@}" | sed -r "s/\x1B\[[0-9;]*[a-zA-Z]//g")
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
@@ -16,18 +17,16 @@ function my_echo() {
fi
}
# function for checking of valid machine(s)
function is_valid_machine ()
{
local ISM=$1
for M in $MACHINES ; do
if [ "$ISM" == "$M" ] || [ "$MACHINE" == "all" ]; then
echo true
return 1
fi
done
echo false
return 0
## 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() {
@@ -39,14 +38,7 @@ function do_exec() {
my_echo true "[EXEC] $cmd"
# TODO: Evaluate alternatives to 'eval' for executing complex commands
# Using 'eval' here allows for dynamic execution of commands that may include
# special characters, variable expansions, or other complexities that are
# difficult to handle with direct execution methods. However, 'eval' comes with
# significant security implications, especially when dealing with untrusted input.
# It executes the given string as a bash command, which can lead to code injection
# vulnerabilities if not carefully managed. This usage is a temporary solution to
# achieve desired functionality and should be revisited to explore safer alternatives.
# Execute the command
if [[ "$show_output" == "show_output" ]]; then
eval $cmd 2>> "$TMP_LOGFILE"
else
@@ -57,7 +49,7 @@ function do_exec() {
if [[ -f "$TMP_LOGFILE" ]]; then
log_text=$(cat "$TMP_LOGFILE")
>> "$LOGFILE" # Clear TMP_LOGFILE after reading
: > "$TMP_LOGFILE" # Clear TMP_LOGFILE after reading
fi
if [[ $cmd_exit_status -ne 0 ]]; then
@@ -76,26 +68,61 @@ function do_exec() {
fi
}
function get_metaname () {
local TMP_NAME=$1
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"
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"
META_NAME="ceryon"
else
META_NAME="$TMP_NAME"
fi
echo "$META_NAME"
}
# clone or update required branch for required meta-<layer>
## 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"
@@ -104,280 +131,333 @@ function fetch_meta() {
local target_git_path="$5"
local patch_list="$6"
local GIT_SSH_COMMAND=""
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
do_exec "git -C "$target_git_path" checkout "$branch_hash" -b "$IMAGE_VERSION""
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
# First, check if the patch can be applied cleanly
my_echo -e "Applying patch: $patch_file"
if do_exec "git -C "$target_git_path" apply --check "$FILES_DIR/$patch_file""; then
# Attempt to apply the patch if 'apply --check' was successful
if ! do_exec "git -C "$target_git_path" am < "$FILES_DIR/$patch_file""; then
# Error message if 'git am' fails
my_echo -e "\033[31;1mFailed to apply patch $patch_file to $layer_name\033[0m"
return 1
fi
else
# Message about skipping if 'apply --check' fails
my_echo -e "\033[33;1mSkipping patch $patch_file already applied or cannot be applied cleanly.\033[0m"
fi
done
fi
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""
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
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
function is_required_machine_layer ()
{
local HIM1=$1
for M in $HIM1 ; do
if [ "$M" == "$MACHINE" ]; then
echo true
return 1
fi
done
echo false
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
## 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
RMT_RES="hd51"
elif [ "$MACHINE_TYPE" == "hd60" ] || [ "$MACHINE_TYPE" == "ax60" ]; then
RMT_RES="hd60"
elif [ "$MACHINE_TYPE" == "hd61" ] || [ "$MACHINE_TYPE" == "ax61" ]; then
RMT_RES="hd61"
elif [ "$MACHINE_TYPE" == "zgemmah7" ] || [ "$MACHINE_TYPE" == "h7" ]; then
RMT_RES="h7"
else
RMT_RES=$MACHINE_TYPE
fi
echo $RMT_RES
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
## Get matching machine build id from machine type
function get_real_machine_id() {
local MACHINEBUILD=$1
if [ "$MACHINEBUILD" == "hd51" ]; then
RMI_RES="ax51"
elif [ "$MACHINEBUILD" == "hd60" ]; then
RMI_RES="ax60"
elif [ "$MACHINEBUILD" == "hd61" ]; then
RMI_RES="ax61"
elif [ "$MACHINEBUILD" == "h7" ]; then
RMI_RES="zgemmah7"
else
RMI_RES=$MACHINEBUILD
fi
echo $RMI_RES
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 create file entries into a file, already existing entry will be ignored
function set_file_entry () {
local FILE_NAME=$1
local FILE_SEARCH_ENTRY=$2
local FILE_NEW_ENTRY=$3
if test ! -f $FILE_NAME; then
echo $FILE_NEW_ENTRY > $FILE_NAME
return 1
else
OLD_CONTENT=`cat $FILE_NAME`
HAS_ENTRY=`grep -c -w $FILE_SEARCH_ENTRY $FILE_NAME`
if [ "$HAS_ENTRY" == "0" ] ; then
echo $FILE_NEW_ENTRY >> $FILE_NAME
fi
NEW_CONTENT=`cat $FILE_NAME`
if [ "$OLD_CONTENT" == "$NEW_CONTENT" ] ; then
return 1
fi
fi
return 0
## 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"
# 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\""
if [ "$machine" != "all" ]; then
BACKUP_CONFIG_DIR="$BACKUP_PATH/$machine/conf"
do_exec "mkdir -p \"$BACKUP_CONFIG_DIR\""
MACHINE_BUILD_DIR=$BUILD_ROOT/$machine
do_exec "mkdir -p $BUILD_ROOT"
LOCAL_CONFIG_FILE_PATH="$MACHINE_BUILD_DIR/conf/local.conf"
BACKUP_CONFIG_DIR="$BACKUP_PATH/$machine/conf"
do_exec "mkdir -p $BACKUP_CONFIG_DIR"
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
LOCAL_CONFIG_FILE_PATH=$MACHINE_BUILD_DIR/conf/local.conf
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 test -d $BUILD_ROOT_DIR/$machine; then
if test ! -L $BUILD_ROOT_DIR/$machine; then
# generate build/config symlinks for compatibility
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 [ -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\""
# generate default config
if test ! -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"
# we need a clean config file
if test -f $LOCAL_CONFIG_FILE_PATH & test ! -f $LOCAL_CONFIG_FILE_PATH.origin; then
# so we save the origin local.conf
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
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\""
# modify or upgrade config files inside conf directory
LOCAL_CONFIG_FILE_INC_PATH=$BASEPATH/local.conf.common.inc
if test -f $LOCAL_CONFIG_FILE_INC_PATH; then
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
if test -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"
set_file_entry "$LOCAL_CONFIG_FILE_PATH" "generated" "# auto generated entries by init script"
# migrate settings after server switch
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|' $LOCAL_CONFIG_FILE_INC_PATH"
do_exec "sed -i -e 's|https://archiv.tuxbox-neutrino.org|https://n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_INC_PATH"
set_file_entry "$LOCAL_CONFIG_FILE_PATH" "$BASEPATH/local.conf.common.inc" "include $BASEPATH/local.conf.common.inc"
do_exec "sed -i -e 's|http://archiv.tuxbox-neutrino.org/sources|https://n4k.sourceforge.io/sources|' $LOCAL_CONFIG_FILE_INC_PATH"
do_exec "sed -i -e 's|https://archiv.tuxbox-neutrino.org/sources|https://n4k.sourceforge.io/sources|' $LOCAL_CONFIG_FILE_INC_PATH"
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
do_exec "sed -i -e 's|http://sstate.tuxbox-neutrino.org|https://n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_INC_PATH"
do_exec "sed -i -e 's|https://sstate.tuxbox-neutrino.org|https://n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_INC_PATH"
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
do_exec "sed -i -e 's|archiv.tuxbox-neutrino.org|n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_INC_PATH"
do_exec "sed -i -e 's|sstate.tuxbox-neutrino.org|n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_INC_PATH"
BBLAYER_CONF_FILE="$MACHINE_BUILD_DIR/conf/bblayers.conf"
my_echo "migrate settings within $LOCAL_CONFIG_FILE_PATH"
do_exec "sed -i -e 's|http://archiv.tuxbox-neutrino.org|https://n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_PATH"
do_exec "sed -i -e 's|https://archiv.tuxbox-neutrino.org|https://n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_PATH"
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
do_exec "sed -i -e 's|http://archiv.tuxbox-neutrino.org/sources|https://n4k.sourceforge.io/sources|' $LOCAL_CONFIG_FILE_PATH"
do_exec "sed -i -e 's|https://archiv.tuxbox-neutrino.org/sources|https://n4k.sourceforge.io/sources|' $LOCAL_CONFIG_FILE_PATH"
META_MACHINE_LAYER="meta-$(get_metaname "$machine")"
do_exec "sed -i -e 's|http://sstate.tuxbox-neutrino.org|https://n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_PATH"
do_exec "sed -i -e 's|https://sstate.tuxbox-neutrino.org|https://n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_PATH"
set_file_entry "$BBLAYER_CONF_FILE" "generated" "# auto generated entries by init script"
do_exec "sed -i -e 's|archiv.tuxbox-neutrino.org|n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_PATH"
do_exec "sed -i -e 's|sstate.tuxbox-neutrino.org|n4k.sourceforge.io|' $LOCAL_CONFIG_FILE_PATH"
if [[ -z "$PYTHON2_SRCREV" ]]; then
PYTHON2_LAYER_NAME=""
fi
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
# Wenn nicht, füge die neue Zeile nach der spezifischen Zeile ein
sed -i -e "/$search_line/a $add_line" "$LOCAL_CONFIG_FILE_INC_PATH"
fi
fi
# add init note
set_file_entry $LOCAL_CONFIG_FILE_PATH "generated" "# auto generated entries by init script"
# add line 1, include for local.conf.common.inc
set_file_entry $LOCAL_CONFIG_FILE_PATH "$BASEPATH/local.conf.common.inc" "include $BASEPATH/local.conf.common.inc"
# add line 2, machine type
M_TYPE='MACHINE = "'`get_real_machine_type $machine`'"'
if set_file_entry $LOCAL_CONFIG_FILE_PATH "MACHINE" "$M_TYPE" == 1; then
my_echo -e "\t\033[37;1m$LOCAL_CONFIG_FILE_PATH has been upgraded with entry: $M_TYPE \033[0m"
fi
# add line 3, machine build
M_ID='MACHINEBUILD = "'`get_real_machine_id $machine`'"'
if set_file_entry $LOCAL_CONFIG_FILE_PATH "MACHINEBUILD" "$M_ID" == 1; 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"
# craete backup for bblayer.conf
if test -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`
# add layer entries into bblayer.conf
set_file_entry $BBLAYER_CONF_FILE "generated" '# auto generated entries by init script'
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' "' == 1;then
my_echo -e "\t\033[37;1m$BBLAYER_CONF_FILE has been upgraded with entry: $LL... \033[0m"
fi
done
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 create local dist directory to prepare for web access
function create_dist_tree () {
## 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
# create dist dir
DIST_BASEDIR="$BASEPATH/dist/$IMAGE_VERSION"
if test ! -d "$DIST_BASEDIR"; then
my_echo -e "\033[37;1mcreate dist directory:\033[0m $DIST_BASEDIR"
do_exec "mkdir -p $DIST_BASEDIR"
fi
# create link sources
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 test -L "$DIST_BASEDIR/$DL/deploy"; then
do_exec "unlink -v $DIST_BASEDIR/$DL/deploy"
fi
done
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
MD5STAMP=`md5sum $MD5SUM_FILE |cut -f 1 -d " "`
echo $MD5STAMP
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
}

178
init.sh
View File

@@ -2,8 +2,10 @@
source init.functions.sh
#set -x
## Comatible image version
IMAGE_VERSION="3.2.4"
## 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)
@@ -12,9 +14,10 @@ GIT_SSH_KEYFILE=""
true="1"
false="0"
DO_UPDATE=$false
DO_RESET=$false
FILES_DIR="$BASEPATH/files"
HTTPD_DIST_HOSTNAME="localhost"
HTTPD_DIST_DIR="/var/www/html/dist"
UPDATE_SERVER_URL="http://localhost"
DIST_DIR="$BASEPATH/dist"
USER_CALL="$0 $@"
## Basename of this script
@@ -30,24 +33,16 @@ rm -f $TMP_LOGFILE
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"
## Current build env script version
VERSION=$(git -C $BASEPATH describe --tags 2>/dev/null)
if [ -z "$VERSION" ]; then
VERSION="$IMAGE_VERSION"
BUILD_ENV_VERSION=$(git -C $BASEPATH describe --tags 2>/dev/null)
if [ -z "$BUILD_ENV_VERSION" ]; then
BUILD_ENV_VERSION="unknown"
fi
INIT_VERSION="$NAME $VERSION"
## Preset required branches and revs
COMPATIBLE_BRANCH="gatesgarth"
COMPATIBLE_TAG="$IMAGE_VERSION"
YOCTO_SRCREV="bc71ec0"
PYTHON2_SRCREV="27d2aeb"
OE_SRCREV="f3f7a5f"
## Machines
# Identical listings
@@ -78,20 +73,6 @@ BACKUP_PATH=$BASEPATH/backups
mkdir -p $BACKUP_PATH
BACKUP_SUFFIX=bak
## Layer sources
YOCTO_GIT_URL="https://git.yoctoproject.org/git/poky"
POKY="poky"
POKY_NAME="$IMAGE_VERSION"
BUILD_ROOT_DIR="$BASEPATH/$POKY-$IMAGE_VERSION"
BUILD_ROOT="$BUILD_ROOT_DIR/build"
OE_LAYER_NAME=meta-openembedded
OE_LAYER_GIT_URL=https://git.openembedded.org/meta-openembedded
OE_LAYER_PATCH_LIST="0001-openembedded-disable-meta-python.patch 0002-openembedded-disable-openembedded-layer-meta-phyton.patch"
OE_CORE_LAYER_NAME=openembedded-core
OE_CORE_LAYER_GIT_URL=https://github.com/openembedded/openembedded-core.git
# meta-neutrino project URL:
PROJECT_URL="https://github.com/tuxbox-neutrino"
@@ -109,19 +90,21 @@ show_help() {
echo ""
echo "Options:"
echo " -m, --machine $HINT_MACHINES"
echo " --httpd-dist-hostname IP or hostname (optional with portname) to define the update server address for local.conf.common.inc, default: $HTTPD_DIST_HOSTNAME"
echo " --httpd-dist-dir Directory where the local httpd server find the deployed images and packages, default: $HTTPD_DIST_DIR"
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"
echo " --version Show version information for buildenv script"
}
## Processing command line arguments
TEMP=$(getopt -o up:m:i:h --long httpd-dist-hostname:,httpd-dist-dir:,update,project-url:,machine:,id-rsa-file,help,version -n 'init' -- "$@")
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
@@ -140,43 +123,90 @@ while true ; do
MACHINE="$2"; shift 2 ;;
-i|--id-rsa-file)
GIT_SSH_KEYFILE="$2"; shift 2 ;;
--httpd-dist-hostname)
HTTPD_DIST_HOSTNAME="$2"; shift 2 ;;
--httpd-dist-dir)
HTTPD_DIST_DIR="$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 "$INIT_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"
OE_LAYER_NAME=meta-openembedded
OE_LAYER_GIT_URL=https://github.com/openembedded/meta-openembedded.git
OE_LAYER_PATCH_LIST=""
OE_CORE_LAYER_NAME=openembedded-core
OE_CORE_LAYER_GIT_URL=https://github.com/openembedded/openembedded-core.git
## 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
# Check machine type
if [ $(is_valid_machine "$MACHINE") == false ]; then
if [ "$(is_valid_machine "$MACHINE")" = "false" ]; then
my_echo "\033[31;1mNo valid machine defined.\033[0m"
my_echo "$HINT_MACHINES"
exit 1
fi
my_echo "------------------------------------------------------------------------------------------"
my_echo "Buildenv Version: \033[37;1m$INIT_VERSION\033[0m "
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 "httpd Dist hostname: \033[37;1m$HTTPD_DIST_HOSTNAME\033[0m "
my_echo "httpd Dist directory: \033[37;1m$HTTPD_DIST_DIR\033[0m "
my_echo "Machine: \033[37;1m$MACHINE\033[0m "
my_echo "Buildroot directory: \033[37;1m$BUILD_ROOT_DIR\033[0m "
my_echo "Update Server URL: \033[37;1m$UPDATE_SERVER_URL\033[0m "
my_echo "Dist directory: \033[37;1m$DIST_DIR\033[0m "
my_echo "Configured Machine(s): \033[37;1m$MACHINE\033[0m "
my_echo "Project Repository URL: \033[37;1m$PROJECT_URL\033[0m "
my_echo "SRCREV Yocto: \033[37;1m$YOCTO_SRCREV\033[0m "
my_echo "SRCREV OE: \033[37;1m$OE_SRCREV\033[0m "
my_echo "SRCREV Python2: \033[37;1m$PYTHON2_SRCREV\033[0m "
my_echo "------------------------------------------------------------------------------------------"
## reset build
if [[ $DO_RESET == "$true" ]]; then
do_reset "$MACHINES"
exit 0
fi
## Fetch meta sources
# fetch required branch from yocto
fetch_meta "" $COMPATIBLE_BRANCH $YOCTO_GIT_URL $YOCTO_SRCREV $BUILD_ROOT_DIR
@@ -188,10 +218,12 @@ fetch_meta "" $COMPATIBLE_BRANCH $OE_LAYER_GIT_URL $OE_SRCREV $BUILD_ROOT_DIR/$O
fetch_meta "" master $OE_CORE_LAYER_GIT_URL "" $BUILD_ROOT_DIR/$OE_CORE_LAYER_NAME
# fetch required branch for meta-python2
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"
if [[ -n "$PYTHON2_SRCREV" ]]; then
PYTHON2_LAYER_NAME=meta-python2
PYTHON2_LAYER_GIT_URL=https://git.openembedded.org/$PYTHON2_LAYER_NAME
PYTHON2_PATCH_LIST="0001-local_conf_outcomment_line_15.patch"
fetch_meta "" $COMPATIBLE_BRANCH $PYTHON2_LAYER_GIT_URL $PYTHON2_SRCREV $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME "$PYTHON2_PATCH_LIST"
fi
# fetch required branch for meta-qt5
QT5_LAYER_NAME=meta-qt5
@@ -242,7 +274,7 @@ 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
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
@@ -257,9 +289,10 @@ fi
## Configure buildsystem
# Create included config file from sample file
if test ! -f $BASEPATH/local.conf.common.inc; then
my_echo "\033[37;1mCONFIG:\033[0mCreate $BASEPATH/local.conf.common.inc as include file for local layer configuration ..."
do_exec "cp -v $BASEPATH/local.conf.common.inc.sample $BASEPATH/local.conf.common.inc"
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
@@ -277,17 +310,13 @@ fi
## Create distribution structure
create_dist_tree;
## check and create distribution directory inside httpd directory for online update
if test ! -L $HTTPD_DIST_DIR; then
my_echo "\033[37;1mLocal setup for package online update.\033[0m"
my_echo "------------------------------------------------------------------------------------------------"
my_echo "The httpd directory $HTTPD_DIST_DIR doesn't exists."
my_echo "If you want to use online update, please configure your webserver and use dist content"
my_echo ""
my_echo "An easy way is to create a symlink to dist directory:"
my_echo ""
my_echo "\033[37;1m\tsudo ln -s $BASEPATH/dist $HTTPD_DIST_DIR\033[0m"
fi
## 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"
@@ -307,6 +336,16 @@ 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 "------------------------------------------------------------------------------------------------"
@@ -317,19 +356,10 @@ 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"
my_echo "\t. ./oe-init-build-env build/<machine>"
my_echo "\tcd $BUILD_ROOT_DIR && . ./oe-init-build-env build/<machine>"
my_echo "\tbitbake neutrino-image"
my_echo "\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: $USER_CALL\033[0m \033[32;1m--update\033[0m"
my_echo ""
my_echo "------------------------------------------------------------------------------------------------"
my_echo "For more informations and next steps take a look at the README.md!"
my_echo "\033[32;1mDONE!\033[0m"
my_echo "For more information and next steps take a look at the README.md!"
exit 0

View File

@@ -242,15 +242,12 @@ DISTRO_TYPE = "beta"
# 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.
### 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 dist directory, must contain the content of the deployed images and packages
#DIST_URL = "${UPDATE_SERVER_URL}/dist"
## 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}"
@@ -312,6 +309,7 @@ SHOUTCAST_DEV_KEY = ""
# 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 = ""
@@ -322,13 +320,21 @@ YT_DEV_KEY = ""
# 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-mp += " \
#EXTRA_OECONF_append_pn-neutrino += " \
# --enable-testing \
#"
## Uncomment these lines to disable debug mode for Neutrino.
#EXTRA_OECONF_append_pn-neutrino-mp += " \
#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"

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

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