Adding new recipe in yocto - yocto

I am new to Yocto and Embedded and wanted to something like this,
$ git clone https://github.com/babelouest/orcania.git
$ git clone https://github.com/babelouest/yder.git
$ git clone https://github.com/babelouest/ulfius.git
$ cd orcania/
$ make && sudo make install
$ cd ../yder/
$ make && sudo make install
$ cd ../ulfius/
$ make && sudo make install
Please help in creating layer and recipe.
Thanks.

I have created the recipes and layer configuration to compile all the mentioned software.
Note: Dependency towards systemd is disabled by default. If you need to run in a system with systemd, you can enable them and add the support.
conf/layer.conf:
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"
# We have a recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"
BBFILE_COLLECTIONS += "babelouest"
BBFILE_PATTERN_babelouest = "^${LAYERDIR}/"
BBFILE_PRIORITY_babelouest = "6"
# Set a variable to get to the top of the meta-layer location
HAB_BASE := '${LAYERDIR}'
recipes-babelouest/orcania/orcania_git.bb:
DESCRIPTION = "Potluck with different functions for different purposes that can be shared among C programs"
HOMEPAGE = "https://github.com/babelouest/orcania"
LICENSE = "LGPL-2.1"
LIC_FILES_CHKSUM = "file://LICENSE;md5=fc178bcd425090939a8b634d1d6a9594"
inherit cmake pkgconfig
SRC_URI = "git://github.com/babelouest/orcania"
SRCREV = "${AUTOREV}"
S = "${WORKDIR}/git"
DEPENDS = "jansson"
RDEPENDS_${PN} = "jansson"
recipes-babelouest/yder/yder_git.bb:
DESCRIPTION = "Logging library for C applications"
HOMEPAGE = "https://github.com/babelouest/yder"
LICENSE = "LGPL-2.1"
LIC_FILES_CHKSUM = "file://LICENSE;md5=40d2542b8c43a3ec2b7f5da31a697b88"
inherit cmake pkgconfig
SRC_URI = "git://github.com/babelouest/yder"
SRCREV = "${AUTOREV}"
S = "${WORKDIR}/git"
DEPENDS = "jansson orcania"
RDEPENDS_${PN} = "jansson orcania"
EXTRA_OECMAKE += "-DWITH_JOURNALD=off"
recipes-babelouest/ulfius/ulfius_git.bb:
DESCRIPTION = "Web Framework to build REST APIs, Webservices or any HTTP endpoint in C language. Can stream large amount of data, integrate JSON data with Jansson, and create websocket services"
HOMEPAGE = "https://babelouest.github.io/ulfius/"
LICENSE = "LGPL-2.1"
LIC_FILES_CHKSUM = "file://LICENSE;md5=40d2542b8c43a3ec2b7f5da31a697b88"
inherit cmake pkgconfig
SRC_URI = "git://github.com/babelouest/ulfius"
SRCREV = "${AUTOREV}"
S = "${WORKDIR}/git"
DEPENDS = "gnutls jansson libmicrohttpd"
RDEPENDS_${PN} = "gnutls jansson libmicrohttpd"
EXTRA_OECMAKE += "-DWITH_JOURNALD=off"
This layer depends on following layers,
meta-openembedded/meta-oe
poky/meta
You can include them in bblayer.conf or name this layer as meta-babelouest and include. All the files are added to my github gist here.

Related

Merging Repo A and Repo B into Repo C and publishing Repo C

I am attempting to automate a HUGO Static Site Generation system.
Repo A is content that would normally be in the /Content directory.
Repo A will be changed often and consists of just .md files.
Repo B is a Hugo Site complete with a Theme directory.
Repo B never changes often.
Repo C is to be a combination of Repo A and B and compiled when there is a new push to Repo A (the content).
I suspect GitHub Action can do this on some sort of push event of repo A.
Where do I begin researching how this would be performed?
Is there a better solution for maintaining the HUGO site and Hugo content in separate Repos?
FYI: This is a HUGO Project, which is a static site generator.
As described in "Using git submodule for Hugo themes", you should not need 3 repositories, but 2.
One for content, which includes in the themes/ folder your theme submodule repository.
You can then add a GitHub Action like jakejarvis/hugo-build-action to build the site on each git push.
You can use Hugo Modules to achieve what you have in mind. My setup is similar to yours--separate repo for content, the site itself, and I'm pulling themes as a Hugo module too.
Here's how to do it
In your module.toml file (if you are using the /config/ directory setup.
[[imports]]
path = "gitlab.com/youronlyone/content"
# BGN: /yuki/ content
[[imports.mounts]]
source = "yuki/en-ph"
target = "content"
lang = "en-ph"
[[imports.mounts]]
source = "yuki/ja"
target = "content"
lang = "ja"
[[imports.mounts]]
source = "yuki/ko"
target = "content"
lang = "ko"
# END: /yuki/ content
# BGN: /snoworld/ content
[[imports.mounts]]
source = "snoworld/en-ph"
target = "content"
lang = "en-ph"
[[imports.mounts]]
source = "snoworld/ja"
target = "content"
lang = "ja"
[[imports.mounts]]
source = "snoworld/ko"
target = "content"
lang = "ko"
# END: /snoworld/ content
# BGN: /techmagus/ content
[[imports.mounts]]
source = "techmagus/en-ph"
target = "content"
lang = "en-ph"
[[imports.mounts]]
source = "techmagus/ja"
target = "content"
lang = "ja"
[[imports.mounts]]
source = "techmagus/ko"
target = "content"
lang = "ko"
# END: /techmagus/ content
# still needed
[[mounts]]
source = "content/en-ph"
target = "content"
lang = "en-ph" # when in multihost / multilang mode
[[mounts]]
source = "content/ja"
target = "content"
lang = "ja" # when in multihost / multilang mode
[[mounts]]
source = "content/ko"
target = "content"
lang = "ko" # when in multihost / multilang mode
If you are using a single config file, just add module. prefix like so:
[module]
[[module.imports]]
path = "gitlab.com/youronlyone/content"
# BGN: /yuki/ content
[[module.imports.mounts]]
source = "yuki/en-ph"
target = "content"
lang = "en-ph"
[[module.imports.mounts]]
source = "yuki/ja"
target = "content"
lang = "ja"
[[module.imports.mounts]]
source = "yuki/ko"
target = "content"
lang = "ko"
# END: /yuki/ content
# still needed
[[module.mounts]]
source = "content/en-ph"
target = "content"
lang = "en-ph" # when in multihost / multilang mode
As you can see in the above code, it is possible to support a multilingual site.
It is also possible to only pull a specific content, like so: (below is code for /config/module.toml setup)
[[imports.mounts]]
source = "love/en-ph"
target = "content"
lang = "en-ph"
includeFiles = ["**/20160703-the-choice-2016.md"]
[[imports.mounts]]
source = "love/ja"
target = "content"
lang = "ja"
includeFiles = ["**/20160703-the-choice-2016.md"]
[[imports.mounts]]
source = "love/ko"
target = "content"
lang = "ko"
includeFiles = ["**/20160703-the-choice-2016.md"]
Or to pull from multiple repos.
Hugo modules is not only for content, it works for i18n, archetypes, data, static, etc. See Module Config: mounts.
As long you've setup Hugo Modules correctly, the GH actions for Hugo will work since it is Hugo that pulls those separate repos during build time (not the GH action script).

Enable swanctl plugin of strongswan in yocto

I have compiled my build of strongswan on board successfully with deprecated version of strongswan (using stroke and charon). Now trying to configure it with swanctl and enable charon-systemd plugin but didnt get that tried same things as done for simple charon plugin but in vain
--without-lib-prefix "
EXTRA_OECONF += "${#bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/', '--without-systemdsystemunitdir', d)}"
#include pacakge name here if you want install it
PACKAGECONFIG ??= "charon curl gmp openssl sqlite3 \
${#bb.utils.contains('DISTRO_FEATURES', 'ldap', 'systemd', 'swanctl', d)}"
PACKAGECONFIG[aesni] = "--enable-aesni,--disable-aesni,"
PACKAGECONFIG[charon] = "--enable-charon,--disable-charon,"
PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl,"
PACKAGECONFIG[gmp] = "--enable-gmp,--disable-gmp,gmp,"
PACKAGECONFIG[vici] = "--enable-vici,--disable-vici,vici,"
PACKAGECONFIG[ldap] = "--enable-ldap,--disable-ldap,openldap,"
PACKAGECONFIG[mysql] = "--enable-mysql,--disable-mysql,mysql5,"
PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl,"
PACKAGECONFIG[scep] = "--enable-scepclient,--disable-scepclient,"
PACKAGECONFIG[soup] = "--enable-soup,--disable-soup,libsoup-2.4,"
PACKAGECONFIG[sqlite3] = "--enable-sqlite,--disable-sqlite,sqlite3,"
PACKAGECONFIG[stroke] = "--enable-stroke,--disable-stroke,"
PACKAGECONFIG[swanctl] = "--enable-swanctl,--disable-swanctl,,libgcc"
#requires swanctl
PACKAGECONFIG[systemd] = "--enable-systemd,--disable-systemd,systemd"
inherit autotools systemd pkgconfig
#
#
#
#
RRECOMMENDS_${PN} = "kernel-module-ipsec"
FILES_${PN} += "${libdir}/ipsec/lib*${SOLIBS} ${libdir}/ipsec/plugins/*.so"
FILES_${PN}-dbg += "${libdir}/ipsec/.debug ${libdir}/ipsec/plugins/.debug ${libexecdir}/ipsec/.debug"
FILES_${PN}-dev += "${libdir}/ipsec/lib*${SOLIBSDEV} ${libdir}/ipsec/*.la ${libdir}/ipsec/plugins/*.la"
FILES_${PN}-staticdev += "${libdir}/ipsec/*.a ${libdir}/ipsec/plugins/*.a"
#
#
RPROVIDES_${PN} += "${PN}-systemd"
RREPLACES_${PN} += "${PN}-systemd"
RCONFLICTS_${PN} += "${PN}-systemd"
SYSTEMD_SERVICE_${PN} = "${#bb.utils.contains('PACKAGECONFIG', 'swanctl', '${BPN}-swanctl.service', '${BPN}.service', d)}"```
Any help in this regard will be appreciated thanks.
PACKAGECONFIG_append = " swanctl "

Recipe Build Failure for requests-unixsocket

I am trying to build the following recipe which should be requests-unixsocket
SUMMARY = "Use requests to talk HTTP via a UNIX domain socket"
HOMEPAGE = "https://github.com/msabramo/requests-unixsocket"
AUTHOR = "Marc Abramowitz <marc#marc-abramowitz.com>"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
SRC_URI = "https://files.pythonhosted.org/packages/4d/c/78b651fe0adbd4227578fa432d1bde03b4f4945a70c81e252a2b6a2d895f/requests-unixsocket-0.2.0.tar.gz"
SRC_URI[md5sum] = "ca405eabee3505e6d557752ba0d0db5e"
SRC_URI[sha256sum] = "9e5c1a20afc3cf786197ae59c79bcdb0e7565f218f27df5f891307ee8817c1ea"
S = "${WORKDIR}/requests-unixsocket-0.2.0"
DEPENDS_${PN} = "python3-pbr"
RDEPENDS_${PN} = "python3-requests python3-urllib3"
inherit setuptools
However this fails with
ERROR: Logfile of failure stored in: /workdir/mender-qemu/build/tmp/work/core2-64-poky-linux/python3-requests-unixsocket/0.2.0-r0/temp/log.do_configure.89766
Log data follows:
| DEBUG: Executing shell function do_configure
| ERROR: Do not try to fetch `pbr' for building. Please add its native recipe to DEPENDS.
... elided
| File "/workdir/mender-qemu/build/tmp/work/core2-64-poky-linux/python3-requests- unixsocket/0.2.0-r0/recipe-sysroot-native/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 786, in resolve
| raise DistributionNotFound(req, requirers)
| pkg_resources.DistributionNotFound: The 'pbr' distribution was not found and is required by the application
| WARNING: /workdir/mender-qemu/build/tmp/work/core2-64-poky-linux/python3-requests-unixsocket/0.2.0-r0/temp/run.do_configure.89766:1 exit 1 from 'NO_FETCH_BUILD=1 /workdir/mender-qemu/build/tmp/work/core2-64-poky-linux/python3-requests-unixsocket/0.2.0-r0/recipe-sysroot-native/usr/bin/python-native/python setup.py clean'
I have a recipe for "python3-pbr" which does bake. I'm not sure of the errors.
Build time dependencies are expressed without _PN so it should be DEPENDS
and it should be native version of pbr, one can use inherit pypi and avoid manually specifying fetch URI, since its using python3 use setuptools3 bbclass. something like below should work well.
SUMMARY = "Use requests to talk HTTP via a UNIX domain socket"
HOMEPAGE = "https://github.com/msabramo/requests-unixsocket"
AUTHOR = "Marc Abramowitz <marc#marc-abramowitz.com>"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
inherit setuptools3 pypi
SRC_URI[md5sum] = "ca405eabee3505e6d557752ba0d0db5e"
SRC_URI[sha256sum] = "9e5c1a20afc3cf786197ae59c79bcdb0e7565f218f27df5f891307ee8817c1ea"
DEPENDS += "python3-pbr-native"
RDEPENDS_${PN} = "python3-requests python3-urllib3"

How to integrated mender within lk-bootloader base-on Yocto Project

I am new for yocto ,now I use a MTK-demo-board to build a linux-distro base on Yocto. I want to realize OTA by mender followed this tutorial:https://docs.mender.io/1.0/Devices/Integrating-with-U-Boot.
but Mender support u-boot as bootloader by default, the MTK use lk bootloader,Then how to realize this function?
The AP which I used is MT8183,The steps I have done list below:
1. /meta/meta-mediatek/recipes-bsp/lk/lk_2.0.0.0.bb . add follow code:
require recipes-bsp/u-boot/u-boot-mender.inc
PROVIDES += "u-boot"
RPROVIDES_{PN} += "u-boot"
2.cp lk_2.0.0.0 lk-fw-utils_2.0.0.0,and changed the file as behind:
a. delete do_genkey{} function;
b. add EXTRA_OEMAKE_class-target = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${CC} ${CFLAGS} ${LDFLAGS}" V=1'
c. add "oe_runmake env" in function do_compile()
d. add PROVIDES_${PN} = "lk-fw-utils"
RPROVIDES_${PN} = "lk-fw-utils"
DEPENDS += "mtd-utils"
3./build/local.conf,add these code
MENDER_ARTIFACT_NAME = "release-1"
INHERIT += "mender-full"
MACHINE = "aiv8183m1v2"
PREFERRED_VERSION_pn-mender = "1.0.%"
PREFERRED_VERSION_pn-mender-artifact = "1.0.%"
PREFERRED_VERSION_pn-mender-artifact-native = "1.0.%"
DISTRO_FEATURES_append = "systemd"
VIRTUAL-RUNTIME_init_manager = "systemed"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""
IMAGE_FSTYPES = "ext4"
4.execute bitbake-layers add-layer /meta/meta-mender/meta-mender-core
5.bitbake-layers create-layer meta-mylayer,in this layer,I mkdir -p /recipes-mender/mender/files, in directory mender,I touch mender_%.bbappend file as bellow:
FILESEXTARPATHS_prepend := "${THISDIR}/file:"
SRC_URI_append = "file://server.crt"
and put servert.crt in the the file directory.
6.in the mancine.conf(aiv8183m1v2.conf),I have added
PREFERRED_PROVIDER_u-boot-fw-utils = "lk-fw-utils"
PREFERRED_PROVIDER_u-boot = "lk"
IMAGE_INSTALL_append = "kernel-modules"
MENDER_STORAGE_DEVICE = "/dev/mmcblk0"
7./meta-mender/meta-mender-core/classes/mender-full.bbclass
MENDER_FEATURES_ENABLE_append_arm = ""
MENDER_FEATURES_ENABLE_append_aarch64 = ""
the result I expected is the linux can OTA over mender.
But,actual results is the project can't cross build.the log says:
DEBUG: Executing shell function soft_link_to_rootfs
| ln: target ‘mender.bmap’ is not a directory
| WARNING: /home/yewkui/yocto-linux/build/tmp/work/aiv8183m1v2-poky-linux/mtk-image-openmm-aiv/1.0-r0/temp/run.soft_link_to_rootfs.1347217:1 exit 1 from 'ln -nfs mtk-image-openmm-aiv-aiv8183m1v2-20181224064735.rootfs.ext4 mender mender.bmap /home/yewkui/yocto-linux/build/tmp/deploy/images/aiv8183m1v2/rootfs.ext4 mender mender.bmap'
| DEBUG: Python function do_rootfs finished
| ERROR: Function failed: soft_link_to_rootfs (log file is located at /home/yewkui/yocto-linux/build/tmp/work/aiv8183m1v2-poky-linux/mtk-image-openmm-aiv/1.0-r0/temp/log.do_rootfs.1347217)
ERROR: Task (/home/yewkui/yocto-linux/meta/poky/../meta-mediatek-mt8183/recipes-aiv/images/mtk-image-openmm-aiv.bb:do_rootfs) failed with exit code '1'
NOTE: Tasks Summary: Attempted 2392 tasks of which 2391 didn't need to be rerun and 1 failed.
NOTE: Writing buildhistory
Maybe I am wrong at first step,but how to realize the OTA by yocto base on MTK lk-bootloader,please help! thanks a lot!

fetching from local directory

Posted a question on Yocto mailing list but didn't get an answer. Hopefully someone can provide one here.
We are storing some of the source code locally on a machine. Found
this on how to do it, https://stackoverflow.com/a/27834916/1636521,
but for some reason it doesn't work for me. I'm pretty sure I'm
missing something but don't know what exactly.
Here is my recipe
SUMMARY = ""
DESCRIPTION = ""
# Licensing Meta-data
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""
# Modify these as desired
PV = "1.0+git${SRCPV}"
SRCREV = "${AUTOREV}"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += " \
file://app.tgz \
"
DEPENDS += "\
libevent \
"
do_compile () {
export SWROOT=${S}/../app
oe_runmake
}
do_install () {
:
}
And here is the error that I'm getting:
Loading cache: 100%
|###########################################################################################################|
Time: 0:00:01
Loaded 3265 entries from dependency cache.
WARNING: /home/user/projects/petalinux-build-system/sources/core/../meta-piccard/recipes-piccard/cpe/cpe.bb:
Unable to get checksum for cpe SRC_URI entry app.tgz: file could not
be found
Parsing recipes: 100%
|#########################################################################################################|
Time: 0:00:04
Parsing of 2476 .bb files complete (2470 cached, 6 parsed). 3269
targets, 229 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.32.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "arm-xilinx-linux-gnueabi"
MACHINE = "zynq-generic"
DISTRO = "petalinux"
DISTRO_VERSION = "2017.3"
TUNE_FEATURES = "arm armv7a vfp thumb neon
callconvention-hard cortexa9"
TARGET_FPU = "hard"
meta
meta-poky = "HEAD:8506cec55de8950e89a4d3e786860f1086782587"
meta-perl
meta-systemd
meta-gpe
meta-python
meta-efl
meta-ruby
meta-filesystems
meta-gnome
meta-multimedia
meta-networking
meta-webserver
meta-xfce
meta-initramfs
meta-oe = "HEAD:a9887ac249b81fcac3007244d0c807c71b73acef"
meta-linaro-toolchain = "HEAD:39860f6c7af0858981cc004bbe4f4c421f6be607"
meta-qt5 = "HEAD:eec778bfb9a0b5494d593a2d7bb02c027b641835"
meta-xilinx = "HEAD:04a45809e0bc42b35c88f8a08305d82fd25e97cf"
meta-xilinx-tools = "HEAD:37eff634934efac72d3e2eabb7c4f8d0c8a36fbb"
meta-petalinux = "HEAD:d74ceaef26e606c2761edfc3446d0ad3c3cc8b8e"
meta-virtualization = "HEAD:cbfd4376d5e9d229f857151ffdfb57fbc6c0c40d"
meta-openamp = "HEAD:cfeca8988418e4967f0d6df828d23a1540ae25a0"
meta-swupdate = "HEAD:6c066d36b1c3c6d46f16c09efe5fb7681bbf3dc5"
meta-piccard = "master:9f114a33df76a3c3f40eca12b7195ff8ebaad876"
workspace = "HEAD:51fa75c5477e29285bbbe810f4327b26d80d511d"
Here is the ls of the recipes directory,
$ ls ~/projects/petalinux-build-system/sources/meta-piccard/recipes-piccard/cpe/files
app app.tgz
The output of
bitbake cpe -e | grep FILESEXTRAPATHS
produces the following line
FILESEXTRAPATHS="/home/userl/projects/petalinux-build-system/sources/core/../meta-piccard/recipes-piccard/cpe/files:__default:"
What am I missing?
You need to add the license file checksum, do like below commands
md5sum apps.tgz
e.g :
siva#siva-Vostro-3268:~$ md5sum hello.tar.gz
62390830e7933767d5e3bd080d619c70 hello.tar.gz
Then copy the number and paste into you recipe(.bb)using the variable see below,
SRC_URI[md5sum] = "62390830e7933767d5e3bd080d619c70"
or
SRC_URI += "file://app.tgz;md5=xxxxxx"