meta-rpm uses groot to build the root file system. Groot will get its own discussion. What I want to talk about here is the steps I used to chase down an error that was happening while generating the root file system. In order to do this, I needed to tweak the groot code.
Groot is pulled in via a recipe in the meta-rpm repo. It is checked out from git, and built as part of the bitbake process.
If you look in the groot_git.bb file you will see the git repo URL and commit ID that is used in the build. At the time of this writing, it looks like this:
require groot.inc SRC_URI = "git://github.com/alexlarsson/groot.git;branch=main" SRCREV = "3dbae6acbbea1585cf3d2507523f0c91af897447" S = "${WORKDIR}/git" PV = "0.1+git${SRCPV}" |
In order to make local changes to groot, I checked it out in a tree parallel to where I have meta-rpm. In order to use this repo in the bitbake process, I need to change the URL to point to this repo. In addition, I can change from having the commit ID in the SRCREV to an instruction to always get the value at the head of the branch. These changes look like this:
SRC_URI = "git:///home/ayoung/devel/groot/;branch=hack;protocol=file" SRCREV = "${AUTOREV}" |
I created a branch called “hack” and made my changes in there. In order to pick up the changes, I need to commit them to this branch.
Most of my changes are adding debugging trace statements.
[ayoung@zygarde groot]$ git show 464c4d8ecb7cc1dcc87b48a78cedc6f36714beea commit 464c4d8ecb7cc1dcc87b48a78cedc6f36714beea Author: Adam Young <ayoung@redhat.com> Date: Thu Mar 4 15:05:32 2021 -0500 add hack diff --git a/grootfs.c b/grootfs.c index 51e5d5c..7a16256 100644 --- a/grootfs.c +++ b/grootfs.c @@ -39,6 +39,24 @@ #include <sys/types.h> #include <sys/xattr.h> +#include <stdarg.h> + +void +hack (const char *format, ...) +{ + va_list args; + + fprintf (stderr, "groot: "); + + va_start (args, format); + vfprintf (stderr, format, args); + va_end (args); + + fprintf (stderr, "\n"); +} + + + typedef struct { int basefd; long max_uid; @@ -986,8 +1004,10 @@ grootfs_listxattr (const char *path, char *list, size_t size) autofree char *basename = NULL; autofd int dirfd = open_parent_dirfd (path, &basename); - if (dirfd < 0) + if (dirfd < 0){ return dirfd; + hack("Nope"); + } autofree char *proc_file = get_proc_fd_path (dirfd, basename); char buf_data[4096]; |
Even though groot has a trace statement, I added an additional one here. Why? The original one was tracing unrelated code that returned the word “Error:” that was stopping the bitbake process, and I did not want to debug that. This is throw away code just to discover the root cause of a problem.
With these changes in, I can see the results of building in the bitbake output.
$ bitbake centos8-test-image ... | groot: Yep security.capability | groot: end size = 19 | groot: input size = 19 | set_inode_xattr: Input/output error while listing attributes of "newgidmap" |