Jungle-Team.com

Desarrollo con OE-ALLIANCE de una imagen enigma2

Vamos a describir brevemente una construcción de imagen enigma2 típica utilizando el projecto OE-ALLIANCE, que son distribuciones linux que instalamos en nuestros receptores, el articulo también presenta cómo configurar una compilación para hardware específico asi como de una imagen enigma2 de cada desarrollador que pertenece a este projecto, en este ejemplo usando Ubuntu Server, que podemos ver su instalacion en este articulo.

Nota
Los ejemplos de este articulo suponen que está utilizando un sistema Linux nativo que ejecuta una distribución reciente de Ubuntu Linux. Si la máquina en la que desea usar OE-ALLIANCE para crear una imagen no es Ubuntu server, debera comprobar que la distribucion usada tiene los requisitos necesarios.

1. Creando requisitos necesarios


Debe instalar paquetes esenciales en su maquina de compilación. El siguiente comando instala los paquetes de host basados ​​en una distribución de Ubuntu, en este caso con Ubuntu Server o Debian.

sudo apt-get update

 

Ahora vamos a realizar la instalación de todos los paquetes necesarios:

sudo apt-get install -y autoconf automake bison bzip2 chrpath coreutils cpio curl cvs debianutils default-jre default-jre-headless diffstat flex g++ gawk gcc gcc-12 gcc-multilib g++-multilib gettext git git-core gzip help2man info iputils-ping java-common libc6-dev libegl1-mesa libglib2.0-dev libncurses5-dev libperl4-corelibs-perl libproc-processtable-perl libsdl1.2-dev libserf-dev libtool libxml2-utils make ncurses-bin patch perl pkg-config psmisc python3 python3-git python3-jinja2 python3-pexpect python3-pip python-setuptools qemu quilt socat sshpass subversion tar texi2html texinfo unzip wget xsltproc xterm xz-utils zip zlib1g-dev zstd fakeroot lz4

NOTA
Ademas de las instalación de los paquetes necesarios, deberemos realizar unas pequeñas configuraciones, para evitar futuros errores al realizar la construcción de la imagen, teniendo en cuenta que las ultimas versiones de ubuntu Server usan python 3

Ejecutamos los siguientes comandos:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2

sudo apt-get install -y locales

Ademas pudiera ser que nuestro sistema operativo no tenga instalado todos los idiomas necesarios para ello:

sudo apt-get install -y locales

sudo locale-gen en_US.UTF-8

2. Clonar Git OE-ALLIANCE


Una vez que hemos completado las instrucciones de configuración para su máquina, debe obtener una copia del repositorio de OE-ALLIANCE de compilación. Use los siguientes comandos para clonar el repositorio.

mkdir OEApersonal

Ahora clonamos en dicho directorio el entorno de compilación de Oe-Alliance, donde debemos seleccionar sobre que version deseamos trabajar, donde existen diferentes entornos de desarrollo, como podemos observar en los branches de su git:

En este ejemplo vamos a usar el entorno de compilacion 5.2, para ello:

Nos situamos en el directorio creado en este ejemplo:

cd OEApersonal

Ahora clonamos el repositorio en nuestra maquina con ubuntu Server en el directorio creado, en este ejemplo 5.2 indica como hemos mencionado antes el entorno de compilación que vamos a utilizar:

git clone https://github.com/oe-alliance/build-enviroment.git -b 5.2

Para finalizar recomendable actualizar el entorno de compilacion:

make update

3. Construcción de una imagen


Use los siguientes pasos para construir su imagen enigma2. El proceso de compilación crea una imagen completa lista para su uso en el receptor, incluida la cadena de herramientas, desde el origen.

OE-ALLIANCE, permite realizar diferentes compilaciones:

3.1. Realizar compilación imagen enigma2

En este caso es compilación de imagen enigma2 sin repositorio de paquetes, es decir no tendremos un servidor feed para instalar plugin, solamente los que ya trae la imagen por defecto.

La estructura del comando es:

MACHINE=xxxxx DISTRO=yyyyy DISTRO_TYPE=release make enigma2-image

En este ejemplo vamos a realizar una compilacion para receptor Dreambox One con Distribucion OpenATV, para ello deberemos:

1. En primer lugar accedemos al directorio de carpetas de compilacion:

2. En segundo lugar realizamos la compilacion, para ello:

MACHINE=dreamone DISTRO=openatv DISTRO_TYPE=release make enigma2-image

Ahora, si lo desea, puede ir al parque a echar de comer a las palomas, por que dependiendo de la potencia de su maquina puede tardar entre 1-3 horas.

 

NOTA
Durante la compilacion pueden observarse errores marcados en rojo, si no son esenciales la compilación continuara, y finalizara, siendo el directorio donde encontraremos la image compilada en este ejemplo en build-enviroment/builds/openatv/release/dreamone/tmp/deploy/images/dreamone

NOTA
Un error comun que suele aparecer es que el sistema de compilación OpenEmbedded usa sumas de verificación y caché de estado compartido para evitar cambios innecesarios, que puede producir error de hash,aunque la compilacion se realizara correctamente

En este tipo de error, se puede eliminar añadiendo en la receta que da error (codigo bb) lo siguiente:

PR[vardepsxeclude]=”DATETIME”

Observaremos que ya no se produce el error:

NOTA
Como se ha comentado antes la imagen compilada la encontraremos en el directorio en build-enviroment/builds/openatv/release/dreamone/tmp/deploy/images/dreamone

3.2. Realizar compilación repositorio paquetes

En este caso es compilación de solo repositorio de paquetes, es decir solamente crearemos los paquetes del repositorio

La estructura del comando es:

MACHINE=xxxxx DISTRO=yyyyy DISTRO_TYPE=release make feeds

En este ejemplo vamos a realizar una compilacion para receptor Dreambox One con Distribucion OpenATV, para ello deberemos:

1. En primer lugar accedemos al directorio de carpetas de compilacion:

2. En segundo lugar realizamos la compilacion, para ello:

MACHINE=dreamone DISTRO=openatv DISTRO_TYPE=release make feeds


NOTA
Durante la compilacion de los feeds puede ocurrir que alguno de los sources no este disponible eventualmente o un error puntual al ejecutarse el codigo, simplemente para solucionarlo lanze nuevamente el comando de compilacion, en otras ocasiones puede ocurrir que un paquete en concreto tenga un error permamente, en este caso puede quitar ese paquete de la compilacion editando el archivo build-enviroment/meta-oe-alliance/meta-oe/recipes-oe-alliance/image/oe-alliance-feeds.bb

Por ejemplo en este caso nos da error permanente en el paquete wireguard-tools

Para solucionarlo como hemos comentado eliminamos la creacion de ese paquete en el archivo anteriormente mencionado

 

NOTA
Una vez que ha finalizado la compilacion correctamente el directorio feed lo encontraremos en OEApersonal/build-enviroment/builds/openatv/release/dreamone/tmp/deploy/ipk

Captura del directorio de los repositorios creados

 

3.3. Realizar compilación imagen + repositorio paquetes

En este caso es compilación de imagen y de repositorio de paquetes, es decir imagen completa.

La estructura del comando es:

MACHINE=xxxxx DISTRO=yyyyy DISTRO_TYPE=release make image

En este ejemplo vamos a realizar una compilacion para receptor Dreambox One con Distribucion OpenATV, para ello deberemos:

1. En primer lugar accedemos al directorio de carpetas de compilacion:

2. En segundo lugar realizamos la compilacion, para ello:

MACHINE=dreamone DISTRO=openatv DISTRO_TYPE=release make image

NOTA
Los errores que podamos encontrar son ya los mencionados en los anteriores puntos de compilacion de imagen enigma2 o feed cuando lo hicimos por separado, ya que en este caso es lo mismo pero se realiza la construccion de ambos a la vez, los directorios por lo tanto los mismos para los feed OEApersonal/build-enviroment/builds/openatv/release/dreamone/tmp/deploy/ipk y para la imagen OEApersonal/build-enviroment/builds/openatv/release/dreamone/tmp/deploy/images/dreamone

Captura cuando finaliza la compilación

3.4. Realizar compilación de un paquete en concreto

En este caso es compilación de un solo paquete y la dependencias necesarias.

Nota
Para realizar la compilacion de un solo paquete en primer lugar debemos crear un pequeño entorno de configuracion, para ello ejecutaremos el comando siguiente, teniendo en cuenta que si hemos realizado anteriormente alguna de las tres compilaciones anteriores mencionadas este primero comando no es necesario, solamente es necesario si es la primera vez que vamos a compilar para un receptor/distro.

La estructura del comando es:

MACHINE=xxxxx DISTRO=yyyyy DISTRO_TYPE=release make init

En este ejemplo vamos a realizar una compilacion para un receptor distinto a los anteriores ejemplos,  para receptor vuduo4kse con Distribucion OpenATV, para ello deberemos:

1. En primer lugar accedemos al directorio de carpetas de compilacion:

2. En segundo lugar realizamos la compilacion, para ello:

MACHINE=vuduo4kse DISTRO=openatv DISTRO_TYPE=release make init

3. Ahora accedemos al directorio para la imagen y receptor de los entornos de compilacion que se ha creado en este ejemplo:

cd builds/openatv/release/vuduo4kse

4. Ahora ejecutamos el siguiente comando:

source env.source

5. Para finalizar ejecutamos el comando siguiente para realizar la compilacion de un paquete en concreto:

bitbake <<nombre de la receta del paquete a compilar>> , en este ejemplo para tailscale

Por lo que para este ejemplo ejecutariamos:

bitbake tailscale

 

Nota
Una vez que ha terminado la compilacion, el paquete compilado en este caso lo hallaremos en el directorio builds/openatv/release/vuduo4kse/tmp/deploy/ipk/cortexa15hf-neon-vfpv4

4. Personalización Basica en las construcciones

En esta parte vamos a realizar una explicacion muy basica del entorno de construcción, en el caso que se desee una información mas profunda debereis leer openembedded que es en lo que se basa OE-ALLIANCE para la construccion de imagenes, asi como documentacion python sobre openatv.

La instalación, configuración y compilación de OE-ALLIANCE establecerá la siguiente estructura de directorios resumida:

OE-ALLIANCE
+– builds
¦      +– distribuciones: releases:receptores:tmp:deploy
¦ +– bitbake
¦ +– sources
¦ +– capas
¦     +– meta-oe-alliance
¦ +– sources

A la hora de trabajar con OE-ALLIANCE es necesario conocer algunos componentes o términos que serán descritos a continuación:

4.1. Modificación de una receta ya creada

Una receta  contiene información sobre cómo bitbake puede obtener el código fuente, configurar el código fuente, parchearlo, compilarlo, instalarlo y, básicamente, todo lo que bitbake debería hacer por ejemplo con un paquete para obtenerlo.

Nota
Cada receta no se realiza del mismo modo, dependera de como el desarrollador proporciona el source, dependencias, en este caso vamos a realizar un ejemplo basico.

En este caso vamos a ver un ejemplo de modificación de una receta de compilación de un paquete, para ello simplemente vamos a ver como actualizar la version de un paquete en este caso easy-rsa.

En este caso las recetas de los paquetes estan dentro de la capa meta-oe donde observaremos distintas capas que contienen las recetas para los distintos paquetes

En este caso la receta para el paquete easy-rsa se halla en recipes-connectivity-openvpn

En este caso la version del paquete easy-rsa que se compila es la version 2.3.0, ahora vamos a ver como modificar la receta para compilar con una version superior, por lo tanto abrimos esta receta, y observamos lo marcado en colores:

curl -sL https://build.openvpn.net/downloads/releases/easy-rsa-2.3.2_master.tar.gz | sha256sum | cut -d ' ' -f 1

curl -sL https://build.openvpn.net/downloads/releases/easy-rsa-2.3.2_master.tar.gz | md5sum | cut -d ' ' -f 1

Por lo tanto ya modificamos estos datos y nos quedaria:

Tras guardar los cambios modificamos el nombre de la receta por la nueva version:

4.2. Personalizar la capa enigma2

En la capa distro se modifican aspectos relativos a la distribución enigma2 personalizada. Estos aspectos pueden ser  nombre  o version  de  la  imagen,  bootlogo,  se  realiza  en  la  capa  distro  del  directorio  configuracion :

Dentro de la capa distro tendremos los archivos de configuracion de cada tipo imagen enigma2 que se halla dentro de OE-ALLIANCE

Por ejemplo si abrimos el correspondiente a openatv:

Donde podemos observar que podemos cambiar el nombre de la distribucion, version, y ademas podemos variar la url de descarga git de la imagen, que nos servira si deseamos clonar el codigo git de openatv para realizar modificaciones en el mismo, en ese sentido, lo podemos realizar de una manera sencilla:

1. Nos creamos una cuenta en https://github.com/

 

2. En este ejemplo accedemos a codigo github de openatv para copiar la url

3. Ahora vamos a nuestra cuenta github y damos a importar repositorio

4. Ahora en clone url introducimos la url de openatv y en nombre de repositorio introducimos el nombre que deseamos llamar a nuestro repositorio

5. Tras pulsar begin import, comenzara la clonacion

Al finalizar ya tendremos el repositorio openatv clonado en nuestro git

Ahora ya podriamos trabajar sobre modificaciones en openatv en nuestro git y luego cambiar en el archivo openatv.conf la url del github por la nuestra.

otra modificacion que podemos realizar es cambiar los paquetes feed a compilar, que se realiza en la capa meta-oe-alliance/meta-oe/recipes-oe-alliance/image

En la receta oe-alliance-feeds.bb podemos añadir o eliminar paquetes que se van a compilar o no:

Esperamos que este recorrido basico sobre el entorno de compilacion OE-ALLIANCE, os sirva para el que quiera empezar a jugar con el desarrollo.

 

 

Salir de la versión móvil