Compile Gateway-OS

I would like to know if compiling the Gateway-OS in Docker using the instructions on the Git page, they come with the last commit made in the dependencies, or come with the latest release.
Ex: Chirpstack-concentratord = Last Commit 4 days ago.
Chirpstack-concentratord = Last Release 18 days ago.

@Alfredo_Erdmann

The answer depends of what recipe you are building. Let’s take the example the chirpstack-concentratord. When you are building from scratch, the first step that yocto will do for this recipe is to fetch the upstream source that it’s defined in this file https://github.com/brocaar/chirpstack-gateway-os/blob/master/layers/chirpstack/meta-chirpstack/recipes-chirpstack/chirpstack-concentratord/chirpstack-concentratord.inc and throughout SRC_URI variable.

I can break down SRC_URI as follows:

  • git://: you will tell yocto that the upstream will be fetch from a git repository
  • github.com/brocaar/chirpstack-concentratord.git: it’s basically a form of <server.username/name-of-repo>, you are cloning from a bare repo
  • protocol=git: defines the type of transport data protocol that is used, in this case: git (think of as ssh since are very similar but… without any security)
  • tag=v${PV}: the tag name of the repo where ${PV} represents a build time variable when packaging the recipe and it’s named version of the recipe.

This variable will depend whether if you are compiling chirsptack-concentratord with sx1301 or sx1302 chip support. Asumming that I will compile with the first option. Hence, this variable will be create from the name of the recipe (chirpstack-concentratord-sx1301_3.0.0-test.5.bb), that it’s 3.0.0-test.

In sumary, you will have ${PV}: 3.0.0-test.5 and having tag=v3.0.0-test.5

When do_unpack() task is executed (after do_fetch()), bitbake will parse SRC_URI and locate the directory S to unpack the source code there.
S can be found in chirpstack-concentratord.inc file as well, this time using another variable called ${WORKDIR}, that will point out to ${TMPDIR}/work/${PF} where:

  • ${PF} represents the combination of ${PN}-${PV}-${PR}
  • ${PN}: recipe name (chirpstack-concentratord-sx1301)
  • ${PV}: previously described
  • ${PR}: defined as R0 (PR = “r1”) in chirpstack-concentratord-sx1301_3.0.0-test.5.bb file

To sum up, you will have S: /build/tmp/raspberrypi/raspberrypi3-glibc/work/cortexa7t2hf-neon-vfpv4-oe-linux-gnueabi/chirpstack-concentratord-sx1301/3.0.0-test.5-r1/git

You can read more about how yocto works to package a recipe and inspect and doing that, you can inspect the build time variables if you like. There are plenty of information that it’s at your disposal :wink:

Then, in your docker instance, if you go to S (source dir of the package), you will notice that HEAD pointer of that repository points to the release tag, 3.0.0-test.5. Then, even though there are commits ahead of this tag in the master branch, it will compile chirpstack-concentratord using that particular release.

On the other hand, fetching source from other recipes, for example the chirpstack-bridge, it’s kind of different since you will get the source from a tarball, but at the end of the day the same ideas exposed here can be applied there. I hope that helps to grasp the concepts.

Hello @sophiekovalevsky Thank you so much for replying.
First, I’m sorry for silly questions, I’m new to working with Docker.
My problem is: I have a GPS error using Concentradord and I saw that in the last commit @brocaar made some modifications that could possibly solve this problem.
But I tried to compile Concentradord through the manual that is in Git, apparently it compiled ok.
I don’t know how to install it on my gateway.
I’m using the latest version of Gateway-OS (Rasp+rhf0m301+Ublox-Neo-6m) with Concentradord and would like to update to the version compiled in the last commit.
You could help me?

@Alfredo_Erdmann,

Maybe you can remove the tag from SRC_URI and provide SRCREV pointing to the latest commit within each sx130X file variant and execute compile only that recipe to check if something gets in the middle, if not, then build the entire distro.

I have not tested, hence, not sure if that will work, but you can give it a try :slight_smile:

How are you, @sophiekovalevsky ?
I’m trying to do things by small steps here kkk.
I was able to install the docker / docker-compose (the old Windows machine was having a problem, I had to do an Ubuntu environment)
I made the git clone only from Concentradord GitHub - chirpstack/chirpstack-concentratord: Concentrator HAL daemon for LoRa gateways..
I accessed the created folder and executed:

# Compile ARMv7hf binary
make build-armv7hf-release

These files were generated as described in:

Binaries are located under target / {ARCHITECTURE} / release

however I don’t know what to do with these files.
I can’t find a type of installed or something to perform the installation on the rasp
image

@Alfredo_Erdmann it looks like you want to create from source chirpstack-concentratord, if this is the case I would suggest to create a new topic on the forum since original one differs.